Using strncpy with sizeof(string) may result in a non-nul-terminated
string at 'dst'. This is not too problematic here because if_xname is the same
size as 'ifra_name' and should always be NUL terminated.
I would still like to replace strncpy with strlcpy which implicitly includes
the null byte in the 'size' argument, just to be on the safe side.

ok?

Index: netinet6/in6_ifattach.c
===================================================================
RCS file: /mount/openbsd/cvs/src/sys/netinet6/in6_ifattach.c,v
retrieving revision 1.115
diff -u -p -r1.115 in6_ifattach.c
--- netinet6/in6_ifattach.c     8 Nov 2019 07:16:29 -0000       1.115
+++ netinet6/in6_ifattach.c     16 Mar 2020 18:49:32 -0000
@@ -245,7 +245,7 @@ in6_ifattach_linklocal(struct ifnet *ifp
         * configure link-local address.
         */
        bzero(&ifra, sizeof(ifra));
-       strncpy(ifra.ifra_name, ifp->if_xname, sizeof(ifra.ifra_name));
+       strlcpy(ifra.ifra_name, ifp->if_xname, sizeof(ifra.ifra_name));
        ifra.ifra_addr.sin6_family = AF_INET6;
        ifra.ifra_addr.sin6_len = sizeof(struct sockaddr_in6);
        ifra.ifra_addr.sin6_addr.s6_addr16[0] = htons(0xfe80);
@@ -320,7 +320,7 @@ in6_ifattach_loopback(struct ifnet *ifp)
                return (0);
 
        bzero(&ifra, sizeof(ifra));
-       strncpy(ifra.ifra_name, ifp->if_xname, sizeof(ifra.ifra_name));
+       strlcpy(ifra.ifra_name, ifp->if_xname, sizeof(ifra.ifra_name));
        ifra.ifra_prefixmask.sin6_len = sizeof(struct sockaddr_in6);
        ifra.ifra_prefixmask.sin6_family = AF_INET6;
        ifra.ifra_prefixmask.sin6_addr = in6mask128;

Reply via email to