diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2023-02-27 03:13:31 +0100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-02-27 18:55:20 +0100 |
commit | 4f523c3276741781346478328f863e60f30cba8e (patch) | |
tree | ba71b6275175243eb5bcff4b66db1b03bc102125 | |
parent | a1d5537741679c117b4c1a9b736ea2540a976eee (diff) | |
download | passt-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>
-rw-r--r-- | tcp.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -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; |