From: Jinhao Gao <gaojin...@huawei.com> When VM migrate VMState of dbus_vmstate, the field(data) of dbus_vmstate having a flag of VMS_ALLOC needs to allocate memory. If the dst doesn't free memory which has been allocated for SaveStateEntry of dbus_vmstate before dst loads device state, it may result that the pointer of data 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> --- backends/dbus-vmstate.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/backends/dbus-vmstate.c b/backends/dbus-vmstate.c index bd050e8e9c..c13fbee760 100644 --- a/backends/dbus-vmstate.c +++ b/backends/dbus-vmstate.c @@ -366,10 +366,21 @@ static int dbus_vmstate_pre_save(void *opaque) return 0; } +static int dbus_vmstate_pre_load(void *opaque) +{ + DBusVMState *self = DBUS_VMSTATE(opaque); + + g_free(self->data); + self->data = NULL; + self->data_size = 0; + return 0; +} + static const VMStateDescription dbus_vmstate = { .name = TYPE_DBUS_VMSTATE, .version_id = 0, .pre_save = dbus_vmstate_pre_save, + .pre_load = dbus_vmstate_pre_load, .post_load = dbus_vmstate_post_load, .fields = (VMStateField[]) { VMSTATE_UINT32(data_size, DBusVMState), -- 2.23.0