Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Sep 2009 19:00:17 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-net@FreeBSD.org
Subject:   Re: kern/138689: commit references a PR
Message-ID:  <200909121900.n8CJ0HJu030374@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/138689; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/138689: commit references a PR
Date: Sat, 12 Sep 2009 18:55:27 +0000 (UTC)

 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.
  	 */
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200909121900.n8CJ0HJu030374>