From: Jinhao Gao <gaojin...@huawei.com> When VM migrate VMState of virtio-net-device/rss, the field(rss_data. indirections_table) of virtio-net-device/rss having a flag of VMS_ALLOC needs to allocate memory. If the dst doesn't free memory which has bee n allocated for SaveStateEntry of virtio-net-device/rss before dst loads device state, it may result that the pointer of rss_data.indirections_table is overlaid when vm loads. We add the pre_load func to free memory, which prevents memory leak.
Signed-off-by: Jinhao Gao <gaojin...@huawei.com> --- hw/net/virtio-net.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 044ac95f6f..102e51f32f 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -2957,11 +2957,22 @@ static bool virtio_net_rss_needed(void *opaque) return VIRTIO_NET(opaque)->rss_data.enabled; } +static int virtio_net_rss_pre_load(void *opaque) +{ + VirtIONet *n = VIRTIO_NET(opaque); + + g_free(n->rss_data.indirections_table); + n->rss_data.indirections_table = NULL; + n->rss_data.indirections_len = 0; + return 0; +} + static const VMStateDescription vmstate_virtio_net_rss = { .name = "virtio-net-device/rss", .version_id = 1, .minimum_version_id = 1, .needed = virtio_net_rss_needed, + .pre_load = virtio_net_rss_pre_load, .fields = (VMStateField[]) { VMSTATE_BOOL(rss_data.enabled, VirtIONet), VMSTATE_BOOL(rss_data.redirect, VirtIONet), -- 2.23.0