Remove an incorrect assertion from in6p_lookup_mcast_ifp().
The socket may be bound to an IPv4-mapped IPv6 address. However, the inp address is not relevant to the JOIN_GROUP or LEAVE_GROUP operations. While here remove an unnecessary check for inp == NULL. Reported by: syzbot+d01ab3d5e6c1516a393c@syzkaller.appspotmail.com Reviewed by: hselasky MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25888
This commit is contained in:
parent
efec381dd1
commit
cfae6a92ac
@ -1817,31 +1817,27 @@ ip6_getmoptions(struct inpcb *inp, struct sockopt *sopt)
|
||||
*
|
||||
* This routine exists to support legacy IPv6 multicast applications.
|
||||
*
|
||||
* If inp is non-NULL, use this socket's current FIB number for any
|
||||
* required FIB lookup. Look up the group address in the unicast FIB,
|
||||
* and use its ifp; usually, this points to the default next-hop.
|
||||
* If the FIB lookup fails, return NULL.
|
||||
* Use the socket's current FIB number for any required FIB lookup. Look up the
|
||||
* group address in the unicast FIB, and use its ifp; usually, this points to
|
||||
* the default next-hop. If the FIB lookup fails, return NULL.
|
||||
*
|
||||
* FUTURE: Support multiple forwarding tables for IPv6.
|
||||
*
|
||||
* Returns NULL if no ifp could be found.
|
||||
*/
|
||||
static struct ifnet *
|
||||
in6p_lookup_mcast_ifp(const struct inpcb *inp,
|
||||
const struct sockaddr_in6 *gsin6)
|
||||
in6p_lookup_mcast_ifp(const struct inpcb *inp, const struct sockaddr_in6 *gsin6)
|
||||
{
|
||||
struct nhop_object *nh;
|
||||
struct in6_addr dst;
|
||||
uint32_t scopeid;
|
||||
uint32_t fibnum;
|
||||
|
||||
KASSERT(inp->inp_vflag & INP_IPV6,
|
||||
("%s: not INP_IPV6 inpcb", __func__));
|
||||
KASSERT(gsin6->sin6_family == AF_INET6,
|
||||
("%s: not AF_INET6 group", __func__));
|
||||
|
||||
in6_splitscope(&gsin6->sin6_addr, &dst, &scopeid);
|
||||
fibnum = inp ? inp->inp_inc.inc_fibnum : RT_DEFAULT_FIB;
|
||||
fibnum = inp->inp_inc.inc_fibnum;
|
||||
nh = fib6_lookup(fibnum, &dst, scopeid, 0, 0);
|
||||
|
||||
return (nh ? nh->nh_ifp : NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user