From 08ffcf57e38ca19d9a7535d61951dbd292f39bdb Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Mon, 14 Apr 2014 21:57:15 +0200 Subject: echo_srv: Fix possible resouce leaks on error in socket_dup(). CID: #17217 Signed-off-by: Andreas Schneider Reviewed-by: Michael Adam --- tests/echo_srv.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/echo_srv.c b/tests/echo_srv.c index 9102a87..8f8f73f 100644 --- a/tests/echo_srv.c +++ b/tests/echo_srv.c @@ -262,6 +262,7 @@ static int socket_dup(int s) rc = getsockname(s2, (struct sockaddr *)&srv_ss2, &srv_ss2_len); if (rc == -1) { perror("getsockname"); + close(s2); return -1; } @@ -270,12 +271,14 @@ static int socket_dup(int s) rc = getpeername(s2, (struct sockaddr *)&cli_ss2, &cli_ss2_len); if (rc == -1) { perror("getpeername"); + close(s2); return -1; } if (cli_ss1_len != cli_ss2_len || srv_ss1_len != srv_ss2_len) { perror("length mismatch"); + close(s2); return -1; } @@ -318,6 +321,7 @@ static int socket_dup(int s) } default: perror("family mismatch"); + close(s2); return -1; } @@ -334,6 +338,7 @@ static int socket_dup(int s) rc = getsockname(s, (struct sockaddr *)&srv_ss3, &srv_ss3_len); if (rc == -1) { perror("getsockname"); + close(s); return -1; } @@ -342,12 +347,14 @@ static int socket_dup(int s) rc = getpeername(s, (struct sockaddr *)&cli_ss3, &cli_ss3_len); if (rc == -1) { perror("getpeername"); + close(s); return -1; } if (cli_ss2_len != cli_ss3_len || srv_ss2_len != srv_ss3_len) { perror("length mismatch"); + close(s); return -1; } @@ -390,6 +397,7 @@ static int socket_dup(int s) } default: perror("family mismatch"); + close(s); return -1; } -- cgit