svn commit: r333505 - in head/sys: netinet netinet6

Stephen Hurd shurd at FreeBSD.org
Fri May 11 21:42:29 UTC 2018


Author: shurd
Date: Fri May 11 21:42:27 2018
New Revision: 333505
URL: https://svnweb.freebsd.org/changeset/base/333505

Log:
  Fix LORs in in6?_leave_group()
  
  r333175 updated the join_group functions, but not the leave_group ones.
  
  Reviewed by:	sbruno
  Sponsored by:	Limelight Networks
  Differential Revision:	https://reviews.freebsd.org/D15393

Modified:
  head/sys/netinet/in_mcast.c
  head/sys/netinet6/in6_mcast.c

Modified: head/sys/netinet/in_mcast.c
==============================================================================
--- head/sys/netinet/in_mcast.c	Fri May 11 20:47:45 2018	(r333504)
+++ head/sys/netinet/in_mcast.c	Fri May 11 21:42:27 2018	(r333505)
@@ -2501,6 +2501,8 @@ inp_leave_group(struct inpcb *inp, struct sockopt *sop
 	/*
 	 * Begin state merge transaction at IGMP layer.
 	 */
+	in_pcbref(inp);
+	INP_WUNLOCK(inp);
 	IN_MULTI_LOCK();
 
 	if (is_final) {
@@ -2531,6 +2533,9 @@ inp_leave_group(struct inpcb *inp, struct sockopt *sop
 out_in_multi_locked:
 
 	IN_MULTI_UNLOCK();
+	INP_WLOCK(inp);
+	if (in_pcbrele_wlocked(inp))
+		return (ENXIO);
 
 	if (error)
 		imf_rollback(imf);

Modified: head/sys/netinet6/in6_mcast.c
==============================================================================
--- head/sys/netinet6/in6_mcast.c	Fri May 11 20:47:45 2018	(r333504)
+++ head/sys/netinet6/in6_mcast.c	Fri May 11 21:42:27 2018	(r333505)
@@ -2381,6 +2381,8 @@ in6p_leave_group(struct inpcb *inp, struct sockopt *so
 	/*
 	 * Begin state merge transaction at MLD layer.
 	 */
+	in_pcbref(inp);
+	INP_WUNLOCK(inp);
 	IN6_MULTI_LOCK();
 
 	if (is_final) {
@@ -2407,6 +2409,9 @@ in6p_leave_group(struct inpcb *inp, struct sockopt *so
 	}
 
 	IN6_MULTI_UNLOCK();
+	INP_WLOCK(inp);
+	if (in_pcbrele_wlocked(inp))
+		return (ENXIO);
 
 	if (error)
 		im6f_rollback(imf);


More information about the svn-src-all mailing list