Commit 966572648f for qemu.org

commit 966572648f246483b2076149b4fb9d665789409a
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Wed Oct 21 10:24:59 2026 +0200

    backends/igvm: fix parameter area entries leak

    qigvm_directive_parameter_area() allocates a QIgvmParameterData entry
    for each parameter area, allocates the data buffer, and queues it in
    the list.

    At the end of qigvm_process_file() we iterate the list to only free
    the data buffer of each entry, but never the entry itself, so all of
    them are leaked.

    Let's also free the entry itself and remove it from the list. We could
    avoid the removal since the list lives on the stack, but it's better to
    leave the list consistent.

    Fixes: c1d466d267cf ("backends/igvm: Add IGVM loader and configuration")
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Message-ID: <20261021082459.72038-1-sgarzare@redhat.com>
    Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

diff --git a/backends/igvm.c b/backends/igvm.c
index 4b9d786308..cf8b762d82 100644
--- a/backends/igvm.c
+++ b/backends/igvm.c
@@ -1086,7 +1086,7 @@ int qigvm_process_file(IgvmCfg *cfg, MachineState *machine_state,
                        bool onlyVpContext, Error **errp)
 {
     int32_t header_count;
-    QIgvmParameterData *parameter;
+    QIgvmParameterData *parameter, *tmp;
     int retval = -1;
     QIgvm ctx;

@@ -1186,10 +1186,11 @@ int qigvm_process_file(IgvmCfg *cfg, MachineState *machine_state,
     retval = qigvm_process_mem_page(&ctx, NULL, errp);

 cleanup_parameters:
-    QTAILQ_FOREACH(parameter, &ctx.parameter_data, next)
+    QTAILQ_FOREACH_SAFE(parameter, &ctx.parameter_data, next, tmp)
     {
+        QTAILQ_REMOVE(&ctx.parameter_data, parameter, next);
         g_free(parameter->data);
-        parameter->data = NULL;
+        g_free(parameter);
     }
     g_free(ctx.id_block);
     g_free(ctx.id_auth);