forked from pool/libvirt
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);
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
|