[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-trivial] [PULL v2 12/12] sockets: avoid string truncation warnings
From: |
Laurent Vivier |
Subject: |
[Qemu-trivial] [PULL v2 12/12] sockets: avoid string truncation warnings when copying UNIX path |
Date: |
Fri, 3 May 2019 13:26:54 +0200 |
From: Daniel P. Berrangé <address@hidden>
In file included from /usr/include/string.h:494,
from include/qemu/osdep.h:101,
from util/qemu-sockets.c:18:
In function ‘strncpy’,
inlined from ‘unix_connect_saddr.isra.0’ at util/qemu-sockets.c:925:5:
/usr/include/bits/string_fortified.h:106:10: warning: ‘__builtin_strncpy’
specified bound 108 equals destination size [-Wstringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘strncpy’,
inlined from ‘unix_listen_saddr.isra.0’ at util/qemu-sockets.c:880:5:
/usr/include/bits/string_fortified.h:106:10: warning: ‘__builtin_strncpy’
specified bound 108 equals destination size [-Wstringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We are already validating the UNIX socket path length earlier in
the functions. If we save this string length when we first check
it, then we can simply use memcpy instead of strcpy later, avoiding
the gcc truncation warnings.
Signed-off-by: Daniel P. Berrangé <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Stefano Garzarella <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Laurent Vivier <address@hidden>
---
util/qemu-sockets.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 970505169000..ba6335e71a95 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -830,6 +830,7 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,
int sock, fd;
char *pathbuf = NULL;
const char *path;
+ size_t pathlen;
sock = qemu_socket(PF_UNIX, SOCK_STREAM, 0);
if (sock < 0) {
@@ -845,7 +846,8 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,
path = pathbuf = g_strdup_printf("%s/qemu-socket-XXXXXX", tmpdir);
}
- if (strlen(path) > sizeof(un.sun_path)) {
+ pathlen = strlen(path);
+ if (pathlen > sizeof(un.sun_path)) {
error_setg(errp, "UNIX socket path '%s' is too long", path);
error_append_hint(errp, "Path must be less than %zu bytes\n",
sizeof(un.sun_path));
@@ -877,7 +879,7 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,
memset(&un, 0, sizeof(un));
un.sun_family = AF_UNIX;
- strncpy(un.sun_path, path, sizeof(un.sun_path));
+ memcpy(un.sun_path, path, pathlen);
if (bind(sock, (struct sockaddr*) &un, sizeof(un)) < 0) {
error_setg_errno(errp, errno, "Failed to bind socket to %s", path);
@@ -901,6 +903,7 @@ static int unix_connect_saddr(UnixSocketAddress *saddr,
Error **errp)
{
struct sockaddr_un un;
int sock, rc;
+ size_t pathlen;
if (saddr->path == NULL) {
error_setg(errp, "unix connect: no path specified");
@@ -913,7 +916,8 @@ static int unix_connect_saddr(UnixSocketAddress *saddr,
Error **errp)
return -1;
}
- if (strlen(saddr->path) > sizeof(un.sun_path)) {
+ pathlen = strlen(saddr->path);
+ if (pathlen > sizeof(un.sun_path)) {
error_setg(errp, "UNIX socket path '%s' is too long", saddr->path);
error_append_hint(errp, "Path must be less than %zu bytes\n",
sizeof(un.sun_path));
@@ -922,7 +926,7 @@ static int unix_connect_saddr(UnixSocketAddress *saddr,
Error **errp)
memset(&un, 0, sizeof(un));
un.sun_family = AF_UNIX;
- strncpy(un.sun_path, saddr->path, sizeof(un.sun_path));
+ memcpy(un.sun_path, saddr->path, pathlen);
/* connect to peer */
do {
--
2.20.1
- Re: [Qemu-trivial] [PULL v2 00/12] Trivial branch patches, (continued)
- [Qemu-trivial] [PULL v2 00/12] Trivial branch patches, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 01/12] hw/net/pcnet: Use qemu_log_mask(GUEST_ERROR) instead of printf, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 06/12] configure: fix pam test warning, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 02/12] CODING_STYLE: specify the indent rule for multiline code, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 03/12] CODING_STYLE: indent example code as all others, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 07/12] Update configure, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 08/12] Header cleanups, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 09/12] net: Print output of "-net nic, model=help" to stdout instead of stderr, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 04/12] doc: fix the configuration path, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 12/12] sockets: avoid string truncation warnings when copying UNIX path,
Laurent Vivier <=
- [Qemu-trivial] [PULL v2 05/12] qom: use object_new_with_type in object_new_with_propv, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 10/12] Makefile: Let the 'clean' rule remove qemu-ga.exe on Windows hosts, Laurent Vivier, 2019/05/03
- [Qemu-trivial] [PULL v2 11/12] hw/sparc/leon3: Allow load of uImage firmwares, Laurent Vivier, 2019/05/03
- Re: [Qemu-trivial] [Qemu-devel] [PULL v2 00/12] Trivial branch patches, Laurent Vivier, 2019/05/07