Author: melifaro
Date: Sun Apr 19 07:27:12 2020
New Revision: 360090
URL: https://svnweb.freebsd.org/changeset/base/360090

Log:
  Fix lookup key generation in fib6_check_urpf().
  
  The version introduced in r359823 assumed D23051
   had been in tree already. As this is not the case yet,
   revert to sockaddr.

Modified:
  head/sys/netinet6/in6_fib.c

Modified: head/sys/netinet6/in6_fib.c
==============================================================================
--- head/sys/netinet6/in6_fib.c Sun Apr 19 02:49:05 2020        (r360089)
+++ head/sys/netinet6/in6_fib.c Sun Apr 19 07:27:12 2020        (r360090)
@@ -362,7 +362,7 @@ fib6_check_urpf(uint32_t fibnum, const struct in6_addr
        struct rib_head *rh;
        struct radix_node *rn;
        struct rtentry *rt;
-       struct in6_addr addr;
+       struct sockaddr_in6 sin6;
        int ret;
 
        KASSERT((fibnum < rt_numfibs), ("fib6_check_urpf: bad fibnum"));
@@ -370,13 +370,18 @@ fib6_check_urpf(uint32_t fibnum, const struct in6_addr
        if (rh == NULL)
                return (0);
 
-       addr = *dst6;
+       /* TODO: radix changes */
+       /* Prepare lookup key */
+       memset(&sin6, 0, sizeof(sin6));
+       sin6.sin6_len = sizeof(struct sockaddr_in6);
+       sin6.sin6_addr = *dst6;
+
        /* Assume scopeid is valid and embed it directly */
        if (IN6_IS_SCOPE_LINKLOCAL(dst6))
-               addr.s6_addr16[1] = htons(scopeid & 0xffff);
+               sin6.sin6_addr.s6_addr16[1] = htons(scopeid & 0xffff);
 
        RIB_RLOCK(rh);
-       rn = rh->rnh_matchaddr((void *)&addr, &rh->head);
+       rn = rh->rnh_matchaddr((void *)&sin6, &rh->head);
        if (rn != NULL && ((rn->rn_flags & RNF_ROOT) == 0)) {
                rt = RNTORT(rn);
 #ifdef RADIX_MPATH
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to