On 04/06/14 05:32, Eric Blake wrote: > I noticed that the apparmor code could request metadata even > for a cdrom with no media, which would cause a memory leak of > the hash table used to look for loops in the backing chain. > But even before that, we blindly dereferenced the path for > printing a debug statement, so it is just better to enforce > that this is only used on non-NULL names. > > * src/util/virstoragefile.c (virStorageFileGetMetadata): Assume > non-NULL path. > * src/util/virstoragefile.h: Annotate this. > * src/security/virt-aa-helper.c (get_files): Fix caller. > > Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> > --- > src/security/virt-aa-helper.c | 5 ++++- > src/util/virstoragefile.c | 4 ++-- > src/util/virstoragefile.h | 3 ++- > 3 files changed, 8 insertions(+), 4 deletions(-) > > diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c > index 64a382c..7bddb2c 100644 > --- a/src/security/virt-aa-helper.c > +++ b/src/security/virt-aa-helper.c > @@ -943,13 +943,16 @@ get_files(vahControl * ctl) > > for (i = 0; i < ctl->def->ndisks; i++) { > virDomainDiskDefPtr disk = ctl->def->disks[i]; > + const char *src = virDomainDiskGetSource(disk); > > + if (!src) > + continue; > /* XXX - if we knew the qemu user:group here we could send it in > * so that the open could be re-tried as that user:group. > */ > if (!disk->backingChain) { > bool probe = ctl->allowDiskFormatProbing; > - disk->backingChain = virStorageFileGetMetadata(virDomainDiskGetSource(disk), > + disk->backingChain = virStorageFileGetMetadata(src, > virDomainDiskGetFormat(disk), > -1, -1, probe); > } > diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c > index 0e1461d..017717c 100644 > --- a/src/util/virstoragefile.c > +++ b/src/util/virstoragefile.c > @@ -1142,9 +1142,9 @@ virStorageFileGetMetadata(const char *path, int format, > path, format, (int)uid, (int)gid, allow_probe); > > virHashTablePtr cycle = virHashCreate(5, NULL); > - virStorageFileMetadataPtr ret; > + virStorageFileMetadataPtr ret = NULL; This assignment will always be overwritten or unused. > > - if (!cycle || !path) > + if (!cycle) > return NULL; > > if (format <= VIR_STORAGE_FILE_NONE) ACK, Peter
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list