aboutsummaryrefslogtreecommitdiff
path: root/gdbstub
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2024-03-12 01:07:01 +0100
committerAlex Bennée <alex.bennee@linaro.org>2024-03-13 11:43:52 +0000
commit6971998e241d8edc842b165b447f706c05166ae6 (patch)
tree5f63ec6012b3bf3918119d6c54ac9228175c3b88 /gdbstub
parentbbc0543b1b8231eb9712aa9b93091a1ccb2a08cd (diff)
downloadqemu-6971998e241d8edc842b165b447f706c05166ae6.zip
qemu-6971998e241d8edc842b165b447f706c05166ae6.tar.gz
qemu-6971998e241d8edc842b165b447f706c05166ae6.tar.bz2
gdbstub: Fix double close() of the follow-fork-mode socket
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 <iii@linux.ibm.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240312001813.13720-1-iii@linux.ibm.com>
Diffstat (limited to 'gdbstub')
-rw-r--r--gdbstub/user.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/gdbstub/user.c b/gdbstub/user.c
index 2005f33..edeb72e 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: