SHA256
1
0
forked from pool/libvirt
libvirt/2d07f1f0-fix-storage-crash.patch
James Fehlig 9e7c17be27 Accepting request 557196 from home:jfehlig:branches:Virtualization
- 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
2017-12-14 23:46:39 +00:00

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);
+ }
}
}