Browse Source

hw/misc/riscv_cpc: Free CPU array in instance_finalize

The TYPE_RISCV_CPC device allocates an array in its instance_init,
but does not free this, leading to leaks like this from QOM/QMP
introspection:

Direct leak of 512 byte in 1 object allocated from:
    #0  in calloc
    #1  in g_malloc0
    #2  in riscv_cpc_init /home/pm215/qemu/build/san/../../hw/misc/riscv_cpc.c:175:15
    #3  in object_initialize_with_type /home/pm215/qemu/build/san/../../qom/object.c:570:5
    #4  in object_new_with_type /home/pm215/qemu/build/san/../../qom/object.c:774:5
    #5  in qmp_device_list_properties /home/pm215/qemu/build/san/../../qom/qom-qmp-cmds.c:206:11
    #6  in qdev_device_help /home/pm215/qemu/build/san/../../system/qdev-monitor.c:313:17
    #7  in hmp_device_add /home/pm215/qemu/build/san/../../system/qdev-monitor.c:1005:9

Free the array in instance_finalize.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260309095328.1406779-1-peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
staging^2
Peter Maydell 5 months ago
committed by Philippe Mathieu-Daudé
parent
commit
caa5d82570
  1. 8
      hw/misc/riscv_cpc.c

8
hw/misc/riscv_cpc.c

@ -185,6 +185,13 @@ static void riscv_cpc_init(Object *obj)
}
}
static void riscv_cpc_finalize(Object *obj)
{
RISCVCPCState *s = RISCV_CPC(obj);
g_free(s->cpus);
}
static void riscv_cpc_realize(DeviceState *dev, Error **errp)
{
RISCVCPCState *s = RISCV_CPC(dev);
@ -254,6 +261,7 @@ static const TypeInfo riscv_cpc_info = {
.parent = TYPE_SYS_BUS_DEVICE,
.instance_size = sizeof(RISCVCPCState),
.instance_init = riscv_cpc_init,
.instance_finalize = riscv_cpc_finalize,
.class_init = riscv_cpc_class_init,
};

Loading…
Cancel
Save