From 6971998e241d8edc842b165b447f706c05166ae6 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Tue, 12 Mar 2024 01:07:01 +0100 Subject: [PATCH] gdbstub: Fix double close() of the follow-fork-mode socket MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the terminal GDB_FORK_ENABLED state is reached, the coordination socket is not needed anymore and is therefore closed. However, if there is a communication error between QEMU gdbstub and GDB, the generic error handling code attempts to close it again. Fix by closing it later - before returning - instead. Fixes: Coverity CID 1539966 Fixes: d547e711a8a5 ("gdbstub: Implement follow-fork-mode child") Signed-off-by: Ilya Leoshkevich Signed-off-by: Alex Bennée Message-Id: <20240312001813.13720-1-iii@linux.ibm.com> --- gdbstub/user.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gdbstub/user.c b/gdbstub/user.c index 2005f3312b..edeb72efeb 100644 --- a/gdbstub/user.c +++ b/gdbstub/user.c @@ -517,6 +517,7 @@ void gdbserver_fork_end(CPUState *cpu, pid_t pid) switch (gdbserver_user_state.fork_state) { case GDB_FORK_ENABLED: if (gdbserver_user_state.running_state) { + close(fd); return; } QEMU_FALLTHROUGH; @@ -542,7 +543,6 @@ void gdbserver_fork_end(CPUState *cpu, pid_t pid) gdbserver_user_state.fork_state = GDB_FORK_ACTIVE; break; case GDB_FORK_ENABLE: - close(fd); gdbserver_user_state.fork_state = GDB_FORK_ENABLED; break; case GDB_FORK_DISABLE: @@ -557,7 +557,6 @@ void gdbserver_fork_end(CPUState *cpu, pid_t pid) if (write(fd, &b, 1) != 1) { goto fail; } - close(fd); gdbserver_user_state.fork_state = GDB_FORK_ENABLED; break; case GDB_FORK_DISABLING: