svn commit: r210876 - head/sbin/hastd

Pawel Jakub Dawidek pjd at FreeBSD.org
Thu Aug 5 18:27:41 UTC 2010


Author: pjd
Date: Thu Aug  5 18:27:41 2010
New Revision: 210876
URL: http://svn.freebsd.org/changeset/base/210876

Log:
  Assert that various buffers we are large enough.
  
  MFC after:	1 month

Modified:
  head/sbin/hastd/proto_tcp4.c
  head/sbin/hastd/proto_uds.c

Modified: head/sbin/hastd/proto_tcp4.c
==============================================================================
--- head/sbin/hastd/proto_tcp4.c	Thu Aug  5 18:26:38 2010	(r210875)
+++ head/sbin/hastd/proto_tcp4.c	Thu Aug  5 18:27:41 2010	(r210876)
@@ -156,7 +156,8 @@ tcp4_addr(const char *addr, struct socka
 		size = (size_t)(pp - addr + 1);
 		if (size > sizeof(iporhost))
 			return (ENAMETOOLONG);
-		strlcpy(iporhost, addr, size);
+		if (strlcpy(iporhost, addr, size) >= size)
+			return (ENAMETOOLONG);
 	}
 	/* Convert string (IP address or host name) to in_addr_t. */
 	ip = str2ip(iporhost);
@@ -420,8 +421,9 @@ sin2str(struct sockaddr_in *sinp, char *
 
 	ip = ntohl(sinp->sin_addr.s_addr);
 	port = ntohs(sinp->sin_port);
-	snprintf(addr, size, "tcp4://%u.%u.%u.%u:%u", ((ip >> 24) & 0xff),
-	    ((ip >> 16) & 0xff), ((ip >> 8) & 0xff), (ip & 0xff), port);
+	PJDLOG_VERIFY(snprintf(addr, size, "tcp4://%u.%u.%u.%u:%u",
+	    ((ip >> 24) & 0xff), ((ip >> 16) & 0xff), ((ip >> 8) & 0xff),
+	    (ip & 0xff), port) < (ssize_t)size);
 }
 
 static bool
@@ -459,7 +461,7 @@ tcp4_local_address(const void *ctx, char
 
 	sinlen = sizeof(sin);
 	if (getsockname(tctx->tc_fd, (struct sockaddr *)&sin, &sinlen) < 0) {
-		strlcpy(addr, "N/A", size);
+		PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size);
 		return;
 	}
 	sin2str(&sin, addr, size);
@@ -477,7 +479,7 @@ tcp4_remote_address(const void *ctx, cha
 
 	sinlen = sizeof(sin);
 	if (getpeername(tctx->tc_fd, (struct sockaddr *)&sin, &sinlen) < 0) {
-		strlcpy(addr, "N/A", size);
+		PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size);
 		return;
 	}
 	sin2str(&sin, addr, size);

Modified: head/sbin/hastd/proto_uds.c
==============================================================================
--- head/sbin/hastd/proto_uds.c	Thu Aug  5 18:26:38 2010	(r210875)
+++ head/sbin/hastd/proto_uds.c	Thu Aug  5 18:27:41 2010	(r210876)
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #include <unistd.h>
 
 #include "hast.h"
+#include "pjdlog.h"
 #include "proto_impl.h"
 
 #define	UDS_CTX_MAGIC	0xd541c
@@ -257,15 +258,15 @@ uds_local_address(const void *ctx, char 
 
 	sunlen = sizeof(sun);
 	if (getsockname(uctx->uc_fd, (struct sockaddr *)&sun, &sunlen) < 0) {
-		strlcpy(addr, "N/A", size);
+		PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size);
 		return;
 	}
 	assert(sun.sun_family == AF_UNIX);
 	if (sun.sun_path[0] == '\0') {
-		strlcpy(addr, "N/A", size);
+		PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size);
 		return;
 	}
-	snprintf(addr, size, "uds://%s", sun.sun_path);
+	PJDLOG_VERIFY(snprintf(addr, size, "uds://%s", sun.sun_path) < (ssize_t)size);
 }
 
 static void
@@ -281,12 +282,12 @@ uds_remote_address(const void *ctx, char
 
 	sunlen = sizeof(sun);
 	if (getpeername(uctx->uc_fd, (struct sockaddr *)&sun, &sunlen) < 0) {
-		strlcpy(addr, "N/A", size);
+		PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size);
 		return;
 	}
 	assert(sun.sun_family == AF_UNIX);
 	if (sun.sun_path[0] == '\0') {
-		strlcpy(addr, "N/A", size);
+		PJDLOG_VERIFY(strlcpy(addr, "N/A", size) < size);
 		return;
 	}
 	snprintf(addr, size, "uds://%s", sun.sun_path);


More information about the svn-src-head mailing list