Message ID | 20200608193715.122785-1-tannerlove.kernel@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] selftests/net: in timestamping, strncpy needs to preserve null byte | expand |
From: Tanner Love <tannerlove.kernel@gmail.com> Date: Mon, 8 Jun 2020 15:37:15 -0400 > From: tannerlove <tannerlove@google.com> > > If user passed an interface option longer than 15 characters, then > device.ifr_name and hwtstamp.ifr_name became non-null-terminated > strings. The compiler warned about this: > > timestamping.c:353:2: warning: ‘strncpy’ specified bound 16 equals \ > destination size [-Wstringop-truncation] > 353 | strncpy(device.ifr_name, interface, sizeof(device.ifr_name)); > > Fixes: cb9eff097831 ("net: new user space API for time stamping of incoming and outgoing packets") > Signed-off-by: Tanner Love <tannerlove@google.com> > Acked-by: Willem de Bruijn <willemb@google.com> Applied, thank you.
diff --git a/tools/testing/selftests/net/timestamping.c b/tools/testing/selftests/net/timestamping.c index aca3491174a1..f4bb4fef0f39 100644 --- a/tools/testing/selftests/net/timestamping.c +++ b/tools/testing/selftests/net/timestamping.c @@ -313,10 +313,16 @@ int main(int argc, char **argv) int val; socklen_t len; struct timeval next; + size_t if_len; if (argc < 2) usage(0); interface = argv[1]; + if_len = strlen(interface); + if (if_len >= IFNAMSIZ) { + printf("interface name exceeds IFNAMSIZ\n"); + exit(1); + } for (i = 2; i < argc; i++) { if (!strcasecmp(argv[i], "SO_TIMESTAMP")) @@ -350,12 +356,12 @@ int main(int argc, char **argv) bail("socket"); memset(&device, 0, sizeof(device)); - strncpy(device.ifr_name, interface, sizeof(device.ifr_name)); + memcpy(device.ifr_name, interface, if_len + 1); if (ioctl(sock, SIOCGIFADDR, &device) < 0) bail("getting interface IP address"); memset(&hwtstamp, 0, sizeof(hwtstamp)); - strncpy(hwtstamp.ifr_name, interface, sizeof(hwtstamp.ifr_name)); + memcpy(hwtstamp.ifr_name, interface, if_len + 1); hwtstamp.ifr_data = (void *)&hwconfig; memset(&hwconfig, 0, sizeof(hwconfig)); hwconfig.tx_type =