[SCM] Socket Wrapper Repository - branch master updated

Andreas Schneider asn at samba.org
Mon Apr 14 13:28:17 MDT 2014


The branch, master has been updated
       via  d242129 echo_srv: Improve reopening low fds.
       via  32c9508 echo_srv: Don't leak client_sock on failures in echo_tcp
       via  4ed4524 tests: Fix an out of bound access.
       via  fab60bb tests: Fix a possible resource leak on error in sockopt test.
       via  efd810d swrap: Do not leak memory in swrap_recvmsg_after().
       via  3786fdc echo_srv: Fix resource leak of fd in pidfile().
       via  f165d65 echo_srv: Fix resource leak of s2 on error.
       via  2254633 echo_srv: Fix resource leak of sock.
       via  03726df tests: Fix creating remove_cmd.
       via  2fb2458 tests: Don't leak file description in test_ioctl.
       via  d5a37e5 cmake: Only set policy in cmake 3.0.
      from  af3c688 cmake: Fix configure warning with cmake 3.0.

http://gitweb.samba.org/?p=socket_wrapper.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d242129438adb6560f9c31383981cad46588bd90
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 11:54:03 2014 +0200

    echo_srv: Improve reopening low fds.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit 32c9508b13218d4594c9991d218c93eff1545c86
Author: Jakub Hrozek <jhrozek at redhat.com>
Date:   Thu Apr 10 11:41:31 2014 +0200

    echo_srv: Don't leak client_sock on failures in echo_tcp
    
    Signed-off-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit 4ed4524c5851bbb042caa052f66263b734cf5546
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 10:49:01 2014 +0200

    tests: Fix an out of bound access.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit fab60bb3f61c7dfd1f028a1f9821dab9ad826df7
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 10:46:18 2014 +0200

    tests: Fix a possible resource leak on error in sockopt test.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit efd810d5e12e7b1409542874f5bf29ab0d431a7b
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 10:42:51 2014 +0200

    swrap: Do not leak memory in swrap_recvmsg_after().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit 3786fdc51b18b74411a4d5cca9af2aa3ff250505
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 10:40:32 2014 +0200

    echo_srv: Fix resource leak of fd in pidfile().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit f165d65e82eaaf139a89cd8b3f58fbe60f8cbecd
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 10:30:40 2014 +0200

    echo_srv: Fix resource leak of s2 on error.
    
    Found by Coverity.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit 2254633003312b1f7462a408480483a2ec58d18a
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 10:28:46 2014 +0200

    echo_srv: Fix resource leak of sock.
    
    Found by Coverity.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit 03726df0861c1a4f85e938a77616ac8780aa4760
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 10:23:14 2014 +0200

    tests: Fix creating remove_cmd.
    
    Found by Coverity.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit 2fb245848b786cd8a3d776810f1faf27d8819097
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Apr 8 09:34:43 2014 +0200

    tests: Don't leak file description in test_ioctl.
    
    Found by Coverity.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>
    Reviewed-by: Simo Sorce <idra at samba.org>

commit d5a37e5661d6dd466cd5dd914300f06406b48f3d
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Apr 8 09:34:11 2014 +0200

    cmake: Only set policy in cmake 3.0.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jakub Hrozek <jhrozek at redhat.com>

-----------------------------------------------------------------------

Summary of changes:
 src/CMakeLists.txt                   |    4 ++-
 src/socket_wrapper.c                 |    7 ++--
 tests/echo_srv.c                     |   56 ++++++++++++++++++++++-----------
 tests/test_echo_tcp_socket_options.c |    4 +-
 tests/test_echo_tcp_writev_readv.c   |    6 ++-
 tests/test_ioctl.c                   |    7 +++-
 6 files changed, 55 insertions(+), 29 deletions(-)


Changeset truncated at 500 lines:

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 449ed54..50ac9ad 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,6 +23,8 @@ set_target_properties(
 )
 
 # This needs to be at the end
-cmake_policy(SET CMP0026 OLD)
+if (CMAKE_VERSION VERSION_GREATER 2.8.13)
+    cmake_policy(SET CMP0026 OLD)
+endif()
 get_target_property(SWRAP_LOCATION socket_wrapper LOCATION)
 set(SOCKET_WRAPPER_LOCATION ${SWRAP_LOCATION} PARENT_SCOPE)
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index c5b1fdf..5ed9d9f 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -3155,7 +3155,7 @@ static int swrap_recvmsg_after(int fd,
 {
 	int saved_errno = errno;
 	size_t i;
-	uint8_t *buf;
+	uint8_t *buf = NULL;
 	off_t ofs = 0;
 	size_t avail = 0;
 	size_t remain;
@@ -3187,7 +3187,7 @@ static int swrap_recvmsg_after(int fd,
 
 	/* we capture it as one single packet */
 	buf = (uint8_t *)malloc(remain);
-	if (!buf) {
+	if (buf == NULL) {
 		/* we just not capture the packet */
 		errno = saved_errno;
 		return -1;
@@ -3228,7 +3228,7 @@ static int swrap_recvmsg_after(int fd,
 						      msg->msg_name,
 						      &msg->msg_namelen);
 			if (rc == -1) {
-				return -1;
+				goto done;
 			}
 
 			swrap_dump_packet(si,
@@ -3247,6 +3247,7 @@ static int swrap_recvmsg_after(int fd,
 		break;
 	}
 
+done:
 	free(buf);
 	errno = saved_errno;
 	return 0;
diff --git a/tests/echo_srv.c b/tests/echo_srv.c
index 70d9a84..9102a87 100644
--- a/tests/echo_srv.c
+++ b/tests/echo_srv.c
@@ -53,7 +53,9 @@ static int pidfile(const char *path)
 {
     int err;
     int fd;
-    char pid_str[32];
+    char pid_str[32] = { 0 };
+    ssize_t nwritten;
+    size_t len;
 
     fd = open(path, O_RDONLY, 0644);
     err = errno;
@@ -70,9 +72,14 @@ static int pidfile(const char *path)
         return err;
     }
 
-    memset(pid_str, 0, sizeof(pid_str));
     snprintf(pid_str, sizeof(pid_str) -1, "%u\n", (unsigned int) getpid());
-    write(fd, pid_str, strlen(pid_str));
+    len = strlen(pid_str);
+
+    nwritten = write(fd, pid_str, len);
+    close(fd);
+    if (nwritten != (ssize_t)len) {
+        return EIO;
+    }
 
     return 0;
 }
@@ -82,6 +89,7 @@ static int become_daemon(struct echo_srv_opts *opts)
     int ret;
     pid_t child_pid;
     int fd;
+    int i;
 
     if (getppid() == 1) {
         return 0;
@@ -119,14 +127,22 @@ static int become_daemon(struct echo_srv_opts *opts)
         close(fd);
     }
 
-    fd = open("/dev/null", O_RDWR);
-    if (fd == -1) {
-        ret = errno;
-        perror("open");
-        return ret;
+    for (i = 0; i < 3; i++) {
+        fd = open("/dev/null", O_RDWR, 0);
+        if (fd < 0) {
+            fd = open("/dev/null", O_WRONLY, 0);
+        }
+        if (fd < 0) {
+            ret = errno;
+            perror("Can't open /dev/null");
+            return ret;
+        }
+        if (fd != i) {
+            perror("Didn't get correct fd");
+            close(fd);
+            return EINVAL;
+        }
     }
-    dup(fd);
-    dup(fd);
 
     umask(0177);
     return 0;
@@ -182,6 +198,7 @@ static int setup_srv(struct echo_srv_opts *opts, int *_sock)
         ret = listen(sock, BACKLOG);
         if (ret == -1) {
             ret = errno;
+            close(sock);
             perror("listen");
             return ret;
         }
@@ -306,11 +323,11 @@ static int socket_dup(int s)
 
     /* Test dup2 */
     s = dup2(s2, s);
+    close(s2);
     if (s == -1) {
         perror("dup");
         return -1;
     }
-    close(s2);
 
     ZERO_STRUCT(srv_ss3);
     srv_ss3_len = sizeof(srv_ss3);
@@ -387,41 +404,42 @@ static void echo_tcp(int sock)
     char buf[BUFSIZE];
     ssize_t bret;
 
-    int client_sock;
+    int client_sock = -1;
     int s;
 
     s = accept(sock, (struct sockaddr *)&css, &addrlen);
     if (s == -1) {
         perror("accept");
-        return;
+	goto done;
     }
 
     client_sock = socket_dup(s);
     if (client_sock == -1) {
         perror("socket_dup");
-        return;
+	goto done;
     }
 
     /* Start ping pong */
     while (1) {
         bret = recv(client_sock, buf, BUFSIZE, 0);
         if (bret == -1) {
-            close(client_sock);
             perror("recv");
-            continue;
+            goto done;
         } else if (bret == 0) {
             break;
         }
 
         bret = send(client_sock, buf, bret, 0);
         if (bret == -1) {
-            close(client_sock);
             perror("send");
-            continue;
+            goto done;
         }
     }
 
-    close(client_sock);
+done:
+    if (client_sock != -1) {
+	    close(client_sock);
+    }
 }
 
 static void echo_udp(int sock)
diff --git a/tests/test_echo_tcp_socket_options.c b/tests/test_echo_tcp_socket_options.c
index 8ec631f..49b1187 100644
--- a/tests/test_echo_tcp_socket_options.c
+++ b/tests/test_echo_tcp_socket_options.c
@@ -118,7 +118,6 @@ static void test_bind_ipv6_only(void **state)
 		case AF_INET:
 			assert_int_equal(rc, -1);
 
-			close(s);
 			break;
 		case AF_INET6:
 			assert_int_equal(rc, 0);
@@ -126,11 +125,12 @@ static void test_bind_ipv6_only(void **state)
 			rc = bind(s, ri->ai_addr, ri->ai_addrlen);
 			assert_int_equal(rc, 0);
 
-			close(s);
 			break;
 		default:
 			break;
 		}
+
+		close(s);
 	}
 	freeaddrinfo(res);
 }
diff --git a/tests/test_echo_tcp_writev_readv.c b/tests/test_echo_tcp_writev_readv.c
index 9f6703f..c7b8dd9 100644
--- a/tests/test_echo_tcp_writev_readv.c
+++ b/tests/test_echo_tcp_writev_readv.c
@@ -68,7 +68,8 @@ static void test_writev_readv_ipv4(void **state)
 
 		for (j = 0; j < i; j++) {
 			memset(send_buf[j], 0, 64);
-			snprintf(send_buf[j], sizeof(send_buf), "packet.%d", j);
+			snprintf(send_buf[j], sizeof(send_buf[j]),
+				 "packet.%d", j);
 
 			iov_send[j].iov_base = send_buf[j];
 			iov_send[j].iov_len = strlen(send_buf[j]);
@@ -132,7 +133,8 @@ static void test_writev_readv_ipv6(void **state)
 
 		for (j = 0; j < i; j++) {
 			memset(send_buf[j], 0, 64);
-			snprintf(send_buf[j], sizeof(send_buf), "packet.%d", j);
+			snprintf(send_buf[j], sizeof(send_buf[j]),
+				 "packet.%d", j);
 
 			iov_send[j].iov_base = send_buf[j];
 			iov_send[j].iov_len = strlen(send_buf[j]);
diff --git a/tests/test_ioctl.c b/tests/test_ioctl.c
index d365641..077e553 100644
--- a/tests/test_ioctl.c
+++ b/tests/test_ioctl.c
@@ -37,9 +37,10 @@ static void teardown(void **state)
 
 	(void) state; /* unused */
 
-	if (swrap_dir != NULL) {
-		snprintf(remove_cmd, sizeof(remove_cmd), "rm -rf %s", swrap_dir);
+	if (swrap_dir == NULL) {
+		return;
 	}
+	snprintf(remove_cmd, sizeof(remove_cmd), "rm -rf %s", swrap_dir);
 
 	rc = system(remove_cmd);
 	if (rc < 0) {
@@ -85,6 +86,8 @@ static void test_swrap_ioctl_sock(void **state)
 
 	assert_int_not_equal(grp, -127);
 #endif
+
+	close(fd);
 }
 
 int main(void) {


-- 
Socket Wrapper Repository


More information about the samba-cvs mailing list