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 */

Reply via email to