From: Jinhao Gao <gaojin...@huawei.com> When VM migrate VMState of spapr_event_log_entry, the field(extended_log) of spapr_event_log_entry having a flag of VMS_ALLOC needs to allocate memory. If the dst doesn't free memory which has been allocated for SaveStateEntry of spapr_event_log_entry before dst loads device state, it may result that the pointer of extended_log 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/ppc/spapr.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 489cefcb81..ddfed1e7ca 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1799,10 +1799,22 @@ static bool spapr_pending_events_needed(void *opaque) return !QTAILQ_EMPTY(&spapr->pending_events); } +static int spapr_event_log_entry_pre_load(void *opaque) +{ + SpaprEventLogEntry *entry = opaque; + + g_free(entry->extended_log); + entry->extended_log = NULL; + entry->extended_length = 0; + + return 0; +} + static const VMStateDescription vmstate_spapr_event_entry = { .name = "spapr_event_log_entry", .version_id = 1, .minimum_version_id = 1, + .pre_load = spapr_event_log_entry_pre_load, .fields = (VMStateField[]) { VMSTATE_UINT32(summary, SpaprEventLogEntry), VMSTATE_UINT32(extended_length, SpaprEventLogEntry), -- 2.23.0