[libvirt] [PATCH] storage: Don't dereference driver object if virStorageSource is not initialized
Peter Krempa
pkrempa at redhat.com
Thu Dec 7 08:37:31 UTC 2017
On Wed, Dec 06, 2017 at 16:39:27 -0500, John Ferlan wrote:
>
>
> On 12/06/2017 10:28 AM, Peter Krempa wrote:
> > 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
> > ---
> >
> > Once pushed I'll also backport it to a maint branch of the last release
> > if that's desired.
> >
> > src/storage/storage_source.c | 38 ++++++++++++++++++++++++++------------
> > 1 file changed, 26 insertions(+), 12 deletions(-)
> >
> > diff --git a/src/storage/storage_source.c b/src/storage/storage_source.c
> > index 4586ef4ad4..a5df84bae3 100644
> > --- a/src/storage/storage_source.c
> > +++ b/src/storage/storage_source.c
> > @@ -419,19 +419,33 @@ virStorageFileReportBrokenChain(int errcode,
> > 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' "),
> ^
> Not that it matters much because it probably won't be seen, but you
> could drop the trailing space.
Right, I've just deleted the second line without fixing the whitespace.
> Reviewed-by: John Ferlan <jferlan at redhat.com>
Thanks.
>
> John
>
> > + src->path);
> > + } else {
> > + virReportSystemError(errcode,
> > + _("Cannot access backing file '%s' "
> > + "of storage file '%s'"),
> > + src->path, parent->path);
> > + }
> > }
> > }
> >
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20171207/a3097b06/attachment-0001.sig>
More information about the libvir-list
mailing list