svn commit: r197129 - head/sys/netinet

Bruce M Simpson bms at FreeBSD.org
Sat Sep 12 18:55:15 UTC 2009


Author: bms
Date: Sat Sep 12 18:55:15 2009
New Revision: 197129
URL: http://svn.freebsd.org/changeset/base/197129

Log:
  Fix an API issue in leave processing for IPv4 multicast groups.
   * Do not assume that the group lookup performed by imo_match_group()
     is valid when ifp is NULL in this case.
   * Instead, return EADDRNOTAVAIL if the ifp cannot be resolved for the
     membership we are being asked to leave.
  
  Caveat user:
   * The way IPv4 multicast memberships are implemented in the inpcb layer
     at the moment, has the side-effect that struct ip_moptions will
     still hold the membership, under the old ifp, until ip_freemoptions()
     is called for the parent inpcb.
   * The underlying issue is: the inpcb layer does not get notification
     of ifp being detached going away in a thread-safe manner.
     This is non-trivial to fix.
  
  But hey, at least the kernel should't panic when you unplug a card.
  
  PR:		138689
  Submitted by:	Stef Walter
  MFC after:	5 days

Modified:
  head/sys/netinet/in_mcast.c

Modified: head/sys/netinet/in_mcast.c
==============================================================================
--- head/sys/netinet/in_mcast.c	Sat Sep 12 18:24:31 2009	(r197128)
+++ head/sys/netinet/in_mcast.c	Sat Sep 12 18:55:15 2009	(r197129)
@@ -2189,6 +2189,9 @@ inp_leave_group(struct inpcb *inp, struc
 	if (!IN_MULTICAST(ntohl(gsa->sin.sin_addr.s_addr)))
 		return (EINVAL);
 
+	if (ifp == NULL)
+		return (EADDRNOTAVAIL);
+
 	/*
 	 * Find the membership in the membership array.
 	 */


More information about the svn-src-all mailing list