mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
conf: avoid memleak on NULL path
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@redhat.com>
This commit is contained in:
parent
8f4ef7e6b6
commit
8733303933
@ -943,13 +943,16 @@ get_files(vahControl * ctl)
|
|||||||
|
|
||||||
for (i = 0; i < ctl->def->ndisks; i++) {
|
for (i = 0; i < ctl->def->ndisks; i++) {
|
||||||
virDomainDiskDefPtr disk = ctl->def->disks[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
|
/* 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.
|
* so that the open could be re-tried as that user:group.
|
||||||
*/
|
*/
|
||||||
if (!disk->backingChain) {
|
if (!disk->backingChain) {
|
||||||
bool probe = ctl->allowDiskFormatProbing;
|
bool probe = ctl->allowDiskFormatProbing;
|
||||||
disk->backingChain = virStorageFileGetMetadata(virDomainDiskGetSource(disk),
|
disk->backingChain = virStorageFileGetMetadata(src,
|
||||||
virDomainDiskGetFormat(disk),
|
virDomainDiskGetFormat(disk),
|
||||||
-1, -1, probe);
|
-1, -1, probe);
|
||||||
}
|
}
|
||||||
|
@ -1144,7 +1144,7 @@ virStorageFileGetMetadata(const char *path, int format,
|
|||||||
virHashTablePtr cycle = virHashCreate(5, NULL);
|
virHashTablePtr cycle = virHashCreate(5, NULL);
|
||||||
virStorageFileMetadataPtr ret;
|
virStorageFileMetadataPtr ret;
|
||||||
|
|
||||||
if (!cycle || !path)
|
if (!cycle)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (format <= VIR_STORAGE_FILE_NONE)
|
if (format <= VIR_STORAGE_FILE_NONE)
|
||||||
|
@ -257,7 +257,8 @@ int virStorageFileProbeFormatFromBuf(const char *path, char *buf,
|
|||||||
virStorageFileMetadataPtr virStorageFileGetMetadata(const char *path,
|
virStorageFileMetadataPtr virStorageFileGetMetadata(const char *path,
|
||||||
int format,
|
int format,
|
||||||
uid_t uid, gid_t gid,
|
uid_t uid, gid_t gid,
|
||||||
bool allow_probe);
|
bool allow_probe)
|
||||||
|
ATTRIBUTE_NONNULL(1);
|
||||||
virStorageFileMetadataPtr virStorageFileGetMetadataFromFD(const char *path,
|
virStorageFileMetadataPtr virStorageFileGetMetadataFromFD(const char *path,
|
||||||
int fd,
|
int fd,
|
||||||
int format);
|
int format);
|
||||||
|
Loading…
Reference in New Issue
Block a user