[libvirt] [PATCH] Libvirt: virTypedParamsValidate: Fix detection of multiple parameters

Peter Krempa pkrempa at redhat.com
Mon Apr 18 14:00:16 UTC 2016


On Tue, Apr 12, 2016 at 10:13:27 -0400, Jason J. Herne wrote:
> virTypedParamsValidate currently uses an index based check to find
> duplicate parameters. This check does not work. Consider the following
> simple example:
> 
> We have only 2 keys
> A  (multiples allowed)
> B  (multiples NOT allowed)
> 
> We are given the following list of parameters to check:
> A
> A
> B
> 
> If you work through the validation loop you will see that our last iteration
> through the loop has i=2 and j=1. In this case, i > j and keys[j].value.i will
> indicate that multiples are not allowed. Both conditionals are satisfied so
> an incorrect error will be given: "parameter '%s' occurs multiple times"
> 
> This patch replaces the index based check with code that remembers
> the name of the last parameter seen and only triggers the error case if
> the current parameter name equals the last one. This works because the
> list is sorted and duplicate parameters will be grouped together.
> 
> In reality, we hit this bug while using selective block migration to migrate
> a guest with 5 disks. 5 was apparently just the right number to push i > j
> and hit this bug.
> 
> virsh migrate --live guestname --copy-storage-all
>               --migrate-disks vdb,vdc,vdd,vde,vdf
>               qemu+ssh://dsthost/system
> 
> Signed-off-by: Jason J. Herne <jjherne at linux.vnet.ibm.com>
> Reviewed-by: Eric Farman <farman at linux.vnet.ibm.com>
> ---
>  src/util/virtypedparam.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)

I've added a test case to cover the problem to
tests/virtypedparamtest.c and pushed this patch. Thanks for taking time
to debug the issue.

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/20160418/6abb7c6e/attachment-0001.sig>


More information about the libvir-list mailing list