On Thu, Oct 03, 2013 at 08:42:17AM -0700, Loganaden Velvindron wrote:
> 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 ?
AFAIK, interface names always can be unterminated.
-Otto
>
> 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 */