On Fri, 29 Jan 2016 13:18:56 +0000 "Dr. David Alan Gilbert (git)" <dgilb...@redhat.com> wrote:
> From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> > > I misunderstood the vmstate macro definition when I reworked the > virtio .get/.put. > The VMSTATE_STRUCT_VARRAY_KNOWN, was described as being for "a > variable length array (i.e. _type *_field) but we know the > length". However it actually specified operation for arrays embedded in > the struct (i.e. _type _field[]) since it lacked the VMS_POINTER > flag. This caused offset calculation to be completely off, examining and > potentially sending random data instead of the VirtQueue content. > > Replace the otherwise unused VMSTATE_STRUCT_VARRAY_KNOWN with a > VMSTATE_STRUCT_VARRAY_POINTER_KNOWN that includes the VMS_POINTER flag > (so now actually doing what it advertises) and use it in the virtio > migration code. > > Fixes and description as per Sascha's suggestions/debug. > > Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > Reported-by: Sascha Silbe <si...@linux.vnet.ibm.com> > Tested-By: Sascha Silbe <si...@linux.vnet.ibm.com> > Reviewed-By: Sascha Silbe <si...@linux.vnet.ibm.com> > > Fixes: 50e5ae4dc3e4f21e874512f9e87b93b5472d26e0 > Fixes: 2cf0148674430b6693c60d42b7eef721bfa9509f > --- > hw/virtio/virtio.c | 8 ++++---- > include/migration/vmstate.h | 18 +++++++++--------- > 2 files changed, 13 insertions(+), 13 deletions(-) Tested-by: Cornelia Huck <cornelia.h...@de.ibm.com>