From 2c5dadc9cf8092359dcc696c14413fe41954c995 Mon Sep 17 00:00:00 2001 From: Pawel Jakub Dawidek Date: Thu, 5 Aug 2010 18:27:41 +0000 Subject: [PATCH] Assert that various buffers we are large enough. MFC after: 1 month --- sbin/hastd/proto_tcp4.c | 12 +++++++----- sbin/hastd/proto_uds.c | 11 ++++++----- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/sbin/hastd/proto_tcp4.c b/sbin/hastd/proto_tcp4.c index 6fe14717317a..8415872d8019 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 cd7292674911..9c900e711d07 100644 --- a/sbin/hastd/proto_uds.c +++ b/sbin/hastd/proto_uds.c @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$"); #include #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);