Commit 28faa379 authored by tannerlove's avatar tannerlove Committed by Kelsey Skunberg

selftests/net: in timestamping, strncpy needs to preserve null byte

BugLink: https://bugs.launchpad.net/bugs/1885932

[ Upstream commit 8027bc03 ]

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: cb9eff09 ("net: new user space API for time stamping of incoming and outgoing packets")
Signed-off-by: default avatarTanner Love <tannerlove@google.com>
Acked-by: default avatarWillem de Bruijn <willemb@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
Signed-off-by: default avatarKelsey Skunberg <kelsey.skunberg@canonical.com>
parent 6d0e7b15
...@@ -332,10 +332,16 @@ int main(int argc, char **argv) ...@@ -332,10 +332,16 @@ int main(int argc, char **argv)
int val; int val;
socklen_t len; socklen_t len;
struct timeval next; struct timeval next;
size_t if_len;
if (argc < 2) if (argc < 2)
usage(0); usage(0);
interface = argv[1]; 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++) { for (i = 2; i < argc; i++) {
if (!strcasecmp(argv[i], "SO_TIMESTAMP")) if (!strcasecmp(argv[i], "SO_TIMESTAMP"))
...@@ -369,12 +375,12 @@ int main(int argc, char **argv) ...@@ -369,12 +375,12 @@ int main(int argc, char **argv)
bail("socket"); bail("socket");
memset(&device, 0, sizeof(device)); 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) if (ioctl(sock, SIOCGIFADDR, &device) < 0)
bail("getting interface IP address"); bail("getting interface IP address");
memset(&hwtstamp, 0, sizeof(hwtstamp)); 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; hwtstamp.ifr_data = (void *)&hwconfig;
memset(&hwconfig, 0, sizeof(hwconfig)); memset(&hwconfig, 0, sizeof(hwconfig));
hwconfig.tx_type = hwconfig.tx_type =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment