lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 240/314] selftests/net: in timestamping, strncpy needs to preserve null byte
    Date
    From: tannerlove <tannerlove@google.com>

    [ 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: 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>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../selftests/networking/timestamping/timestamping.c | 10 ++++++++--
    1 file changed, 8 insertions(+), 2 deletions(-)

    diff --git a/tools/testing/selftests/networking/timestamping/timestamping.c b/tools/testing/selftests/networking/timestamping/timestamping.c
    index aca3491174a1e..f4bb4fef0f399 100644
    --- a/tools/testing/selftests/networking/timestamping/timestamping.c
    +++ b/tools/testing/selftests/networking/timestamping/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 =
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 22:31    [W:2.122 / U:0.748 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site