forked from pool/libvirt
9e7c17be27
- storage: Don't dereference driver object if virStorageSource is not initialized 2d07f1f0-fix-storage-crash.patch bsc#1072974 OBS-URL: https://build.opensuse.org/request/show/557196 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=649
63 lines
2.7 KiB
Diff
63 lines
2.7 KiB
Diff
commit 2d07f1f0ebd44b0348daa61afa0de34f3f838c22
|
|
Author: Peter Krempa <pkrempa@redhat.com>
|
|
Date: Wed Dec 6 16:20:07 2017 +0100
|
|
|
|
storage: Don't dereference driver object if virStorageSource is not initialized
|
|
|
|
virStorageFileReportBrokenChain uses data from the driver private data
|
|
pointer to print the user and group. This would lead to a crash in call
|
|
paths where we did not initialize the storage backend as recently added
|
|
in commit 24e47ee2b93 to qemuDomainDetermineDiskChain.
|
|
|
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1522682
|
|
|
|
Index: libvirt-3.10.0/src/storage/storage_source.c
|
|
===================================================================
|
|
--- libvirt-3.10.0.orig/src/storage/storage_source.c
|
|
+++ libvirt-3.10.0/src/storage/storage_source.c
|
|
@@ -419,19 +419,33 @@ virStorageFileReportBrokenChain(int errc
|
|
virStorageSourcePtr src,
|
|
virStorageSourcePtr parent)
|
|
{
|
|
- unsigned int access_user = src->drv->uid;
|
|
- unsigned int access_group = src->drv->gid;
|
|
|
|
- if (src == parent) {
|
|
- virReportSystemError(errcode,
|
|
- _("Cannot access storage file '%s' "
|
|
- "(as uid:%u, gid:%u)"),
|
|
- src->path, access_user, access_group);
|
|
+ if (src->drv) {
|
|
+ unsigned int access_user = src->drv->uid;
|
|
+ unsigned int access_group = src->drv->gid;
|
|
+
|
|
+ if (src == parent) {
|
|
+ virReportSystemError(errcode,
|
|
+ _("Cannot access storage file '%s' "
|
|
+ "(as uid:%u, gid:%u)"),
|
|
+ src->path, access_user, access_group);
|
|
+ } else {
|
|
+ virReportSystemError(errcode,
|
|
+ _("Cannot access backing file '%s' "
|
|
+ "of storage file '%s' (as uid:%u, gid:%u)"),
|
|
+ src->path, parent->path, access_user, access_group);
|
|
+ }
|
|
} else {
|
|
- virReportSystemError(errcode,
|
|
- _("Cannot access backing file '%s' "
|
|
- "of storage file '%s' (as uid:%u, gid:%u)"),
|
|
- src->path, parent->path, access_user, access_group);
|
|
+ if (src == parent) {
|
|
+ virReportSystemError(errcode,
|
|
+ _("Cannot access storage file '%s'"),
|
|
+ src->path);
|
|
+ } else {
|
|
+ virReportSystemError(errcode,
|
|
+ _("Cannot access backing file '%s' "
|
|
+ "of storage file '%s'"),
|
|
+ src->path, parent->path);
|
|
+ }
|
|
}
|
|
}
|
|
|