[libvirt] [PATCH 3/3] util: storage: Improve error message when requesting image above 'start'

Peter Krempa pkrempa at redhat.com
Wed Apr 22 12:29:57 UTC 2015


On Wed, Apr 22, 2015 at 14:24:22 +0200, Martin Kletzander wrote:
> On Wed, Apr 22, 2015 at 02:15:21PM +0200, Peter Krempa wrote:
> >On Wed, Apr 22, 2015 at 14:09:18 +0200, Martin Kletzander wrote:
> >> On Tue, Apr 21, 2015 at 05:52:14PM +0200, Peter Krempa wrote:
> >> >When a user would specify a backing chain index that is above the start
> >> >point libvirt would report a rather unhelpful error:
> >> >
> >> >invalid argument: could not find backing store 1 in chain for 'sub/link2'
> >> >
> >> >This patch adds an explicit check that the index is below start point in
> >> >the backing store and reports the following error if not:
> >> >
> >> >invalid argument: requested backing store index 1 is above 'sub/../qcow2' in chain for 'sub/link2'
> >> >
> >> >Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1177062
> >> >---
> >> > src/util/virstoragefile.c | 9 +++++++++
> >> > 1 file changed, 9 insertions(+)
> >> >
> >> >diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> >> >index c9d3977..2a2f238 100644
> >> >--- a/src/util/virstoragefile.c
> >> >+++ b/src/util/virstoragefile.c
> >> >@@ -1341,6 +1341,15 @@ virStorageFileChainLookup(virStorageSourcePtr chain,
> >> >         *parent = startFrom;
> >> >     }
> >> >
> >> >+    if (idx && idx < i) {
> >> >+        virReportError(VIR_ERR_INVALID_ARG,
> >> >+                       _("requested backing store index %u is above '%s' "
> >> >+                         "in chain for '%s'"),
> >> >+                       idx, NULLSTR(startFrom->path), NULLSTR(start));
> >>
> >> Possible crasher: startFrom can be NULL here, rather move the check
> >> into the previous block where the parent is being set when found (idx
> >> can't be < i when there is no startFrom anyway).  You can then avoid
> >> cleaning up the *parent here -+
> >>                               |
> >>                   +-----------+
> >>                   |
> >>                   v
> >
> >Actually right at the beginning of the function @parent gets filled by a
> >pointer to a local virStorageSource pointer (stack allocated) in case
> >the caller passed NULL as @parent. This allows to use the variable since
> >it is used in the lookup loop even if the user doesn't pass it.
> >
> 
> Yeah, but I was talking about startFrom->path sigsegv-ing if
> startFrom == NULL.
> 
> >Don't worry, I had the same thought when I wrote the condition :)
> >
> 
> Don't worry, I know people sometime misunderstand me ;)

Okay, after some explaining I understand now what you meant. The
misunderstanding was mainly due to my incapacitaded mental power today.

I'll move the check as you've suggested and push the series.

Thanks.

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150422/124b6d67/attachment-0001.sig>


More information about the libvir-list mailing list