From 8114cd44c8a18d92a715fa77d6c136c67f807d20 Mon Sep 17 00:00:00 2001 From: Nikolai Barybin Date: Thu, 11 Sep 2025 15:36:55 +0300 Subject: [PATCH] dump: enhance dump_state_prepare fd initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Initializing descriptor with zero is unsafe: during cleanup we risk to unconditional close of fd == 0 in case dump state wasn't fully initialized. Thus, let's init fd with -1 value and check its value before closing it. Signed-off-by: Nikolai Barybin Reviewed-by: Daniel P. Berrangé Reviewed-by: Marc-André Lureau Message-Id: <20250911123656.413160-2-nikolai.barybin@virtuozzo.com> --- dump/dump.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dump/dump.c b/dump/dump.c index 80ed6c8d21..1f216e74f5 100644 --- a/dump/dump.c +++ b/dump/dump.c @@ -104,7 +104,10 @@ static int dump_cleanup(DumpState *s) guest_phys_blocks_free(&s->guest_phys_blocks); memory_mapping_list_free(&s->list); - close(s->fd); + if (s->fd != -1) { + close(s->fd); + } + s->fd = -1; g_free(s->guest_note); g_clear_pointer(&s->string_table_buf, g_array_unref); s->guest_note = NULL; @@ -1709,8 +1712,8 @@ static DumpState dump_state_global = { .status = DUMP_STATUS_NONE }; static void dump_state_prepare(DumpState *s) { - /* zero the struct, setting status to active */ - *s = (DumpState) { .status = DUMP_STATUS_ACTIVE }; + /* zero the struct, setting status to active and fd to -1 */ + *s = (DumpState) { .fd = -1, .status = DUMP_STATUS_ACTIVE }; } bool qemu_system_dump_in_progress(void)