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