aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2017-02-04 23:08:35 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2017-02-26 15:39:29 +0100
commitbd5d2353aa69e68e45d8a89787bab17c155e9e24 (patch)
tree3de67a859ac82b7da07bb17e50dec1d15177d89b
parent70f2e64e4dde21ba8b2e8d3fd682533c89a53487 (diff)
slirp: tcp_listen(): Don't try to close() an fd we never opened
Coverity points out (CID 1005725) that an error-exit path in tcp_listen() will try to close(s) even if the reason it got there was that the qemu_socket() failed and s was never opened. Not only that, this isn't even the right function to use, because we need closesocket() to do the right thing on Windows. Change to using the right function and only calling it if needed. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
-rw-r--r--slirp/socket.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/slirp/socket.c b/slirp/socket.c
index 6c18971368..86927722e1 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -713,7 +713,9 @@ tcp_listen(Slirp *slirp, uint32_t haddr, u_int hport, uint32_t laddr,
(listen(s,1) < 0)) {
int tmperrno = errno; /* Don't clobber the real reason we failed */
- close(s);
+ if (s >= 0) {
+ closesocket(s);
+ }
sofree(so);
/* Restore the real errno */
#ifdef _WIN32