[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v1] tools: fix usage of strncpy
In case of truncation no trailing zero will be added to the target string. Reduce the amount of bytes to copy by one to make sure a trailing zero always exists. In file included from /usr/include/string.h:495, from libxl_internal.h:38, from libxl_utils.c:20: In function 'strncpy', inlined from 'libxl__prepare_sockaddr_un' at libxl_utils.c:1262:5: /usr/include/bits/string_fortified.h:106:10: error: '__builtin_strncpy' specified bound 108 equals destination size [-Werror=stringop-truncation] 106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> --- gcc may not detect the off-by-one error in libxl__prepare_sockaddr_un, fix the strncpy usage anyway. tools/libvchan/vchan-socket-proxy.c | 8 ++++---- tools/libxl/libxl_utils.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/libvchan/vchan-socket-proxy.c b/tools/libvchan/vchan-socket-proxy.c index 13700c5d67..b312f05ca7 100644 --- a/tools/libvchan/vchan-socket-proxy.c +++ b/tools/libvchan/vchan-socket-proxy.c @@ -140,7 +140,7 @@ static int set_nonblocking(int fd, int nonblocking) { static int connect_socket(const char *path_or_fd) { int fd; char *endptr; - struct sockaddr_un addr; + struct sockaddr_un addr = {}; fd = strtoll(path_or_fd, &endptr, 0); if (*endptr == '\0') { @@ -153,7 +153,7 @@ static int connect_socket(const char *path_or_fd) { return -1; addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, path_or_fd, sizeof(addr.sun_path)); + strncpy(addr.sun_path, path_or_fd, sizeof(addr.sun_path) - 1); if (connect(fd, (const struct sockaddr *)&addr, sizeof(addr)) == -1) { close(fd); return -1; @@ -167,7 +167,7 @@ static int connect_socket(const char *path_or_fd) { static int listen_socket(const char *path_or_fd) { int fd; char *endptr; - struct sockaddr_un addr; + struct sockaddr_un addr = {}; fd = strtoll(path_or_fd, &endptr, 0); if (*endptr == '\0') { @@ -180,7 +180,7 @@ static int listen_socket(const char *path_or_fd) { return -1; addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, path_or_fd, sizeof(addr.sun_path)); + strncpy(addr.sun_path, path_or_fd, sizeof(addr.sun_path) - 1); if (bind(fd, (const struct sockaddr *)&addr, sizeof(addr)) == -1) { close(fd); return -1; diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index f360f5e228..83592e829d 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -1259,7 +1259,7 @@ int libxl__prepare_sockaddr_un(libxl__gc *gc, } memset(un, 0, sizeof(struct sockaddr_un)); un->sun_family = AF_UNIX; - strncpy(un->sun_path, path, sizeof(un->sun_path)); + strncpy(un->sun_path, path, sizeof(un->sun_path) - 1); return 0; }
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |