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
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list