From cb2f3814bb0eef051c91473ef7f2d341a0db7312 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Mon, 12 Oct 2026 07:13:18 +0000 Subject: [PATCH] vmspawn: don't leak the job id if sending blockdev-create fails The job map owns its keys, but the error path added in commit 1d0a8e5dbd only frees the value when it unregisters the job. Free the key as well, like dispatch_pending_job() does. Signed-off-by: Martin Pitt (cherry picked from commit 67b4f43a54f29b3c0fd5a455b4f956613eae8668) --- src/vmspawn/vmspawn-qmp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vmspawn/vmspawn-qmp.c b/src/vmspawn/vmspawn-qmp.c index 3c951d6151..9f52ac9694 100644 --- a/src/vmspawn/vmspawn-qmp.c +++ b/src/vmspawn/vmspawn-qmp.c @@ -681,7 +681,8 @@ static int qmp_setup_ephemeral_drive(VmspawnQmpBridge *bridge, QmpClient *qmp, D r = qmp_client_invoke(qmp, /* ret_slot= */ NULL, "blockdev-create", QMP_CLIENT_ARGS(cmd_args), on_qmp_complete, (void*) "blockdev-create"); if (r < 0) { - _unused_ _cleanup_(pending_job_freep) PendingJob *dead = hashmap_remove(bridge->pending_jobs, job_id); + _cleanup_free_ char *key = NULL; + _unused_ _cleanup_(pending_job_freep) PendingJob *dead = hashmap_remove2(bridge->pending_jobs, job_id, (void**) &key); return log_error_errno(r, "Failed to send blockdev-create for '%s': %m", drive->path); }