Message ID | 20240312001813.13720-1-iii@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | gdbstub: Fix double close() of the follow-fork-mode socket | expand |
Ilya Leoshkevich <iii@linux.ibm.com> writes: > 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> Queued to gdbstub/next, thanks.
diff --git a/gdbstub/user.c b/gdbstub/user.c index 7f9f19a1249..08aed022e26 100644 --- a/gdbstub/user.c +++ b/gdbstub/user.c @@ -502,6 +502,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; @@ -527,7 +528,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: @@ -542,7 +542,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:
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> --- gdbstub/user.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)