提交 87333039 编写于 作者: E Eric Blake

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: NEric Blake <eblake@redhat.com>
上级 8f4ef7e6
...@@ -943,13 +943,16 @@ get_files(vahControl * ctl) ...@@ -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, ...@@ -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, ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册