Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 May 2012 09:24:45 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r235985 - head/sys/netinet
Message-ID:  <201205250924.q4P9OjIP093191@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Fri May 25 09:24:45 2012
New Revision: 235985
URL: http://svn.freebsd.org/changeset/base/235985

Log:
  MFp4 bz_ipv6_fast:
  
    Properly protect the inp read access when handling the control code.
    In the past this was expensive but given the rlock it's not so much
    anymore.
  
    Spotted while:	optimizing udp6
    Discussed with:	rwatson (a few months ago)
  
    Sponsored by:	The FreeBSD Foundation
    Sponsored by:	iXsystems
  
  Reviewed by:	gnn (as part of the whole)
  MFC After:	3 days

Modified:
  head/sys/netinet/udp_usrreq.c

Modified: head/sys/netinet/udp_usrreq.c
==============================================================================
--- head/sys/netinet/udp_usrreq.c	Fri May 25 09:16:59 2012	(r235984)
+++ head/sys/netinet/udp_usrreq.c	Fri May 25 09:24:45 2012	(r235985)
@@ -971,12 +971,14 @@ udp_output(struct inpcb *inp, struct mbu
 	}
 
 	src.sin_family = 0;
+	INP_RLOCK(inp);
 	if (control != NULL) {
 		/*
 		 * XXX: Currently, we assume all the optional information is
 		 * stored in a single mbuf.
 		 */
 		if (control->m_next) {
+			INP_RUNLOCK(inp);
 			m_freem(control);
 			m_freem(m);
 			return (EINVAL);
@@ -1018,6 +1020,7 @@ udp_output(struct inpcb *inp, struct mbu
 		m_freem(control);
 	}
 	if (error) {
+		INP_RUNLOCK(inp);
 		m_freem(m);
 		return (error);
 	}
@@ -1039,7 +1042,6 @@ udp_output(struct inpcb *inp, struct mbu
 	 * XXXRW: Check that hash locking update here is correct.
 	 */
 	sin = (struct sockaddr_in *)addr;
-	INP_RLOCK(inp);
 	if (sin != NULL &&
 	    (inp->inp_laddr.s_addr == INADDR_ANY && inp->inp_lport == 0)) {
 		INP_RUNLOCK(inp);



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