Use an interface index instead of a pointer for multicast options.
authormpi <mpi@openbsd.org>
Wed, 17 Dec 2014 09:45:59 +0000 (09:45 +0000)
committermpi <mpi@openbsd.org>
Wed, 17 Dec 2014 09:45:59 +0000 (09:45 +0000)
commitec0be06b6d983c7080de92e271b00734845072fd
tree74aa9bb070950d6905ec470c6c5c3ff3d7309ffc
parent15cd87076d7959d8eb2e3456a50f217caec420f8
Use an interface index instead of a pointer for multicast options.

Output interface (port) selection for multicast traffic is not done via
route lookups.  Instead the output ifp is registred when setsockopt(2)
is called with the IP{V6,}_MULTICAST_IF option.  But since there is no
mechanism to invalidate such pointer stored in a pcb when an interface
is destroyed/removed, it might lead your kernel to fault.

Prevent a fault upon resume reported by frantisek holop, thanks!

ok mikeb@, claudio@
16 files changed:
sys/net/if.c
sys/net/if_pfsync.c
sys/net/if_vxlan.c
sys/netinet/igmp.c
sys/netinet/in_pcb.c
sys/netinet/ip_carp.c
sys/netinet/ip_mroute.c
sys/netinet/ip_output.c
sys/netinet/ip_var.h
sys/netinet6/in6_src.c
sys/netinet6/ip6_mroute.c
sys/netinet6/ip6_output.c
sys/netinet6/ip6_var.h
sys/netinet6/mld6.c
sys/netinet6/nd6_nbr.c
sys/netinet6/nd6_rtr.c