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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Don't worry, I had the same thought when I wrote the condition :)

Peter

Attachment: signature.asc
Description: Digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]