selftests/net: in timestamping, strncpy needs to preserve null byte
[ Upstream commit 8027bc0307ce59759b90679fa5d8b22949586d20 ]
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: cb9eff0978
("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>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
7e5c47b8f4
commit
7f5c8bd3a2
1 changed files with 8 additions and 2 deletions
|
@ -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)
|
||||||
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 =
|
||||||
|
|
Loading…
Add table
Reference in a new issue