summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2010-08-05 18:27:41 +0000
committerpjd <pjd@FreeBSD.org>2010-08-05 18:27:41 +0000
commit8f25a1f5690a3220ab26f9ae74a0c54cc3a0075a (patch)
tree69593025d0867d71f06665b48ffb87e2db022f9c /sbin
parentca14b5deab70f381014e291a3b7b803c4db5c81f (diff)
downloadFreeBSD-src-8f25a1f5690a3220ab26f9ae74a0c54cc3a0075a.zip
FreeBSD-src-8f25a1f5690a3220ab26f9ae74a0c54cc3a0075a.tar.gz
Assert that various buffers we are large enough.
MFC after: 1 month
Diffstat (limited to 'sbin')
-rw-r--r--sbin/hastd/proto_tcp4.c12
-rw-r--r--sbin/hastd/proto_uds.c11
2 files changed, 13 insertions, 10 deletions
diff --git a/sbin/hastd/proto_tcp4.c b/sbin/hastd/proto_tcp4.c
index 6fe1471..8415872 100644
--- a/sbin/hastd/proto_tcp4.c
+++ b/sbin/hastd/proto_tcp4.c
@@ -156,7 +156,8 @@ tcp4_addr(const char *addr, struct sockaddr_in *sinp)
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 *addr, size_t size)
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 *addr, size_t size)
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, char *addr, size_t size)
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);
diff --git a/sbin/hastd/proto_uds.c b/sbin/hastd/proto_uds.c
index cd72926..9c900e7 100644
--- a/sbin/hastd/proto_uds.c
+++ b/sbin/hastd/proto_uds.c
@@ -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 *addr, size_t size)
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 *addr, size_t size)
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);
OpenPOWER on IntegriCloud