[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-trivial] [PULL 20/22] gdbstub: Handle errors in gdb_accept()
From: |
Michael Tokarev |
Subject: |
[Qemu-trivial] [PULL 20/22] gdbstub: Handle errors in gdb_accept() |
Date: |
Sun, 20 May 2018 09:15:06 +0300 |
From: Peter Maydell <address@hidden>
In gdb_accept(), we both fail to check all errors (notably
that from socket_set_nodelay(), as Coverity notes in CID 1005666),
and fail to return an error status back to our caller. Correct
both of these things, so that errors in accept() result in our
stopping with a useful error message rather than ignoring it.
Signed-off-by: Peter Maydell <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Reviewed-by: Thomas Huth <address@hidden>
Signed-off-by: Michael Tokarev <address@hidden>
---
gdbstub.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/gdbstub.c b/gdbstub.c
index b99980d2e2..e4ece2f5bc 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -1814,7 +1814,7 @@ void gdb_signalled(CPUArchState *env, int sig)
put_packet(s, buf);
}
-static void gdb_accept(void)
+static bool gdb_accept(void)
{
GDBState *s;
struct sockaddr_in sockaddr;
@@ -1826,7 +1826,7 @@ static void gdb_accept(void)
fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
if (fd < 0 && errno != EINTR) {
perror("accept");
- return;
+ return false;
} else if (fd >= 0) {
qemu_set_cloexec(fd);
break;
@@ -1834,7 +1834,10 @@ static void gdb_accept(void)
}
/* set short latency */
- socket_set_nodelay(fd);
+ if (socket_set_nodelay(fd)) {
+ perror("setsockopt");
+ return false;
+ }
s = g_malloc0(sizeof(GDBState));
s->c_cpu = first_cpu;
@@ -1843,6 +1846,7 @@ static void gdb_accept(void)
gdb_has_xml = false;
gdbserver_state = s;
+ return true;
}
static int gdbserver_open(int port)
@@ -1883,7 +1887,11 @@ int gdbserver_start(int port)
if (gdbserver_fd < 0)
return -1;
/* accept connections */
- gdb_accept();
+ if (!gdb_accept()) {
+ close(gdbserver_fd);
+ gdbserver_fd = -1;
+ return -1;
+ }
return 0;
}
--
2.11.0
- [Qemu-trivial] [PULL 00/22] Trivial patches for 2018-05-20, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 04/22] qemu-option-trace: -trace enable= is a pattern, not a file, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 13/22] trivial: Do not include pci.h if it is not necessary, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 01/22] tcg: fix s/compliment/complement/ typos, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 03/22] slirp/debug: Print IP addresses in human readable form, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 02/22] misc, ide: remove use of HWADDR_PRIx in trace events, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 17/22] typedefs: Remove PcGuestInfo from qemu/typedefs.h, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 15/22] hw/timer/mt48t59: Fix bit-rotten NVRAM_PRINTF format strings, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 06/22] qemu-img-commands.hx: argument ordering fixups, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 20/22] gdbstub: Handle errors in gdb_accept(),
Michael Tokarev <=
- [Qemu-trivial] [PULL 08/22] qemu-img: remove references to GEN_DOCS, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 07/22] qemu-img.texi: fix command ordering, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 22/22] acpi: fix a comment about aml_call0(), Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 10/22] qemu-img-cmds.hx: add passive-aggressive note, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 21/22] qapi/net.json: Fix the version number of the "vlan" removal, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 05/22] HACKING: document preference for g_new instead of g_malloc, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 09/22] qemu-img: Make documentation between .texi and .hx consistent, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 16/22] qemu-options: Allow -no-user-config again, Michael Tokarev, 2018/05/20