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