From a4efa3fc5dffb8c5011ac889aae83fb5e38fbd85 Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Mon, 16 Apr 2012 12:46:46 -0700 Subject: [PATCH] socket-util: Close socket on failed dscp modification. If socket-util failed to modify the dscp bits of an active connection, it would fail to close the file descriptor potentially causing a leak. Found by inspection. Signed-off-by: Ethan Jackson --- lib/socket-util.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/lib/socket-util.c b/lib/socket-util.c index 6554e972..aded01c3 100644 --- a/lib/socket-util.c +++ b/lib/socket-util.c @@ -571,7 +571,7 @@ inet_open_active(int style, const char *target, uint16_t default_port, } error = set_nonblocking(fd); if (error) { - goto exit_close; + goto exit; } /* The socket options set here ensure that the TOS bits are set during @@ -589,24 +589,17 @@ inet_open_active(int style, const char *target, uint16_t default_port, error = connect(fd, (struct sockaddr *) &sin, sizeof sin) == 0 ? 0 : errno; if (error == EINPROGRESS) { error = EAGAIN; - } else if (error && error != EAGAIN) { - goto exit_close; } - /* Success: error is 0 or EAGAIN. */ - goto exit; - -exit_close: - close(fd); exit: if (!error || error == EAGAIN) { if (sinp) { *sinp = sin; } - *fdp = fd; - } else { - *fdp = -1; + } else if (fd >= 0) { + close(fd); } + *fdp = fd; return error; } -- 2.30.2