[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