Hi All,
>From nd6_rtr.c:
bzero(&ifra, sizeof(ifra));
/*
* in6_update_ifa() does not use ifra_name, but we accurately set it
* for safety.
*/
strncpy(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);
Assuming that if_name(ifp) is the maximum size, wouldn't that possibly lead to
an unterminated string.
In such a case, wouldn't strlcpy be better ?
Index: sys/netinet6/nd6_rtr.c
===================================================================
RCS file: /cvs/src/sys/netinet6/nd6_rtr.c,v
retrieving revision 1.72
diff -u -p -r1.72 nd6_rtr.c
--- sys/netinet6/nd6_rtr.c 1 Jul 2013 14:22:20 -0000 1.72
+++ sys/netinet6/nd6_rtr.c 3 Oct 2013 15:33:22 -0000
@@ -1814,7 +1814,7 @@ in6_ifadd(struct nd_prefix *pr, int priv
* in6_update_ifa() does not use ifra_name, but we accurately set it
* for safety.
*/
- 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);
/* prefix */