aboutgitcodebugslistschat
path: root/tcp.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2023-02-27 03:13:31 +0100
committerStefano Brivio <sbrivio@redhat.com>2023-02-27 18:55:20 +0100
commit4f523c3276741781346478328f863e60f30cba8e (patch)
treeba71b6275175243eb5bcff4b66db1b03bc102125 /tcp.c
parenta1d5537741679c117b4c1a9b736ea2540a976eee (diff)
downloadpasst-4f523c3276741781346478328f863e60f30cba8e.tar
passt-4f523c3276741781346478328f863e60f30cba8e.tar.gz
passt-4f523c3276741781346478328f863e60f30cba8e.tar.bz2
passt-4f523c3276741781346478328f863e60f30cba8e.tar.lz
passt-4f523c3276741781346478328f863e60f30cba8e.tar.xz
passt-4f523c3276741781346478328f863e60f30cba8e.tar.zst
passt-4f523c3276741781346478328f863e60f30cba8e.zip
tcp: Avoid (theoretical) resource leak (CWE-772) Coverity warning
If tcp_timer_ctl() gets a socket number greater than SOCKET_MAX (2 ^ 24), we return error but we don't close the socket. This is a rather formal issue given that, at least on Linux, socket numbers are monotonic and we're in general not allowed to open so many sockets. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'tcp.c')
-rw-r--r--tcp.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/tcp.c b/tcp.c
index 561064e..b674311 100644
--- a/tcp.c
+++ b/tcp.c
@@ -702,6 +702,9 @@ static void tcp_timer_ctl(const struct ctx *c, struct tcp_tap_conn *conn)
fd = timerfd_create(CLOCK_MONOTONIC, 0);
if (fd == -1 || fd > SOCKET_MAX) {
debug("TCP: failed to get timer: %s", strerror(errno));
+ if (fd > -1)
+ close(fd);
+ conn->timer = -1;
return;
}
conn->timer = fd;