[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-trivial] [Qemu-devel] [PULL 20/22] gdbstub: Handle errors in g
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-trivial] [Qemu-devel] [PULL 20/22] gdbstub: Handle errors in gdb_accept() |
Date: |
Thu, 24 May 2018 19:23:14 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
On 05/24/2018 06:35 PM, Paolo Bonzini wrote:
> On 20/05/2018 08:15, Michael Tokarev wrote:
>> 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;
>
> Coverity notes that this leaks fd.
Oops didn't noticed. It this is so trivial than Coverity could directly
send the fix to the list, like modern compilers.
>> + }
>>
>> 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;
>> }
- [Qemu-trivial] [PULL 04/22] qemu-option-trace: -trace enable= is a pattern, not a file, (continued)
- [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, 2018/05/20
- [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
- [Qemu-trivial] [PULL 11/22] hw/ide/ahci: Keep ALLWINNER_AHCI() macro internal, Michael Tokarev, 2018/05/20
- [Qemu-trivial] [PULL 12/22] tests: fix tpm-crb tpm-tis tests race, Michael Tokarev, 2018/05/20