Module Name:    src
Committed By:   rtr
Date:           Sat Aug  2 03:55:26 UTC 2014

Modified Files:
        src/sys/netinet: raw_ip.c tcp_usrreq.c udp_usrreq.c

Log Message:
restore splsoftnet() in various usrreqs that were removed during the PRU
splits.  we will properly review removal after the PRU split work is
complete.


To generate a diff of this commit:
cvs rdiff -u -r1.139 -r1.140 src/sys/netinet/raw_ip.c
cvs rdiff -u -r1.194 -r1.195 src/sys/netinet/tcp_usrreq.c
cvs rdiff -u -r1.212 -r1.213 src/sys/netinet/udp_usrreq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netinet/raw_ip.c
diff -u src/sys/netinet/raw_ip.c:1.139 src/sys/netinet/raw_ip.c:1.140
--- src/sys/netinet/raw_ip.c:1.139	Thu Jul 31 03:39:35 2014
+++ src/sys/netinet/raw_ip.c	Sat Aug  2 03:55:26 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: raw_ip.c,v 1.139 2014/07/31 03:39:35 rtr Exp $	*/
+/*	$NetBSD: raw_ip.c,v 1.140 2014/08/02 03:55:26 rtr Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.139 2014/07/31 03:39:35 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.140 2014/08/02 03:55:26 rtr Exp $");
 
 #include "opt_inet.h"
 #include "opt_compat_netbsd.h"
@@ -618,8 +618,8 @@ rip_connect(struct socket *so, struct mb
 	error = rip_connect_pcb(inp, nam);
 	if (! error)
 		soisconnected(so);
-
 	splx(s);
+
 	return error;
 }
 
@@ -627,24 +627,33 @@ static int
 rip_disconnect(struct socket *so)
 {
 	struct inpcb *inp = sotoinpcb(so);
+	int s;
 
 	KASSERT(solocked(so));
 	KASSERT(inp != NULL);
 
+	s = splsoftnet();
 	soisdisconnected(so);
 	rip_disconnect1(inp);
+	splx(s);
+
 	return 0;
 }
 
 static int
 rip_shutdown(struct socket *so)
 {
+	int s;
+
 	KASSERT(solocked(so));
 
 	/*
 	 * Mark the connection as being incapable of further input.
 	 */
+	s = splsoftnet();
 	socantsendmore(so);
+	splx(s);
+
 	return 0;
 }
 
@@ -676,22 +685,32 @@ rip_stat(struct socket *so, struct stat 
 static int
 rip_peeraddr(struct socket *so, struct mbuf *nam)
 {
+	int s;
+
 	KASSERT(solocked(so));
 	KASSERT(sotoinpcb(so) != NULL);
 	KASSERT(nam != NULL);
 
+	s = splsoftnet();
 	in_setpeeraddr(sotoinpcb(so), nam);
+	splx(s);
+
 	return 0;
 }
 
 static int
 rip_sockaddr(struct socket *so, struct mbuf *nam)
 {
+	int s;
+
 	KASSERT(solocked(so));
 	KASSERT(sotoinpcb(so) != NULL);
 	KASSERT(nam != NULL);
 
+	s = splsoftnet();
 	in_setsockaddr(sotoinpcb(so), nam);
+	splx(s);
+
 	return 0;
 }
 

Index: src/sys/netinet/tcp_usrreq.c
diff -u src/sys/netinet/tcp_usrreq.c:1.194 src/sys/netinet/tcp_usrreq.c:1.195
--- src/sys/netinet/tcp_usrreq.c:1.194	Thu Jul 31 03:39:35 2014
+++ src/sys/netinet/tcp_usrreq.c	Sat Aug  2 03:55:26 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: tcp_usrreq.c,v 1.194 2014/07/31 03:39:35 rtr Exp $	*/
+/*	$NetBSD: tcp_usrreq.c,v 1.195 2014/08/02 03:55:26 rtr Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -99,7 +99,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.194 2014/07/31 03:39:35 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.195 2014/08/02 03:55:26 rtr Exp $");
 
 #include "opt_inet.h"
 #include "opt_ipsec.h"
@@ -705,6 +705,7 @@ tcp_accept(struct socket *so, struct mbu
 	struct tcpcb *tp = NULL;
 	int ostate = 0;
 	int error = 0;
+	int s;
 
 	KASSERT(solocked(so));
 
@@ -718,6 +719,7 @@ tcp_accept(struct socket *so, struct mbu
 	 * done at higher levels; just return the address
 	 * of the peer, storing through addr.
 	 */
+	s = splsoftnet();
 #ifdef INET
 	if (inp) {
 		in_setpeeraddr(inp, nam);
@@ -729,6 +731,7 @@ tcp_accept(struct socket *so, struct mbu
 	}
 #endif
 	tcp_debug_trace(so, tp, ostate, PRU_ACCEPT);
+	splx(s);
 
 	return 0;
 }
@@ -773,7 +776,6 @@ tcp_bind(struct socket *so, struct mbuf 
 		break;
 #endif
 	}
-
 	tcp_debug_trace(so, tp, ostate, PRU_BIND);
 	splx(s);
 
@@ -786,9 +788,9 @@ tcp_listen(struct socket *so)
 	struct inpcb *inp = NULL;
 	struct in6pcb *in6p = NULL;
 	struct tcpcb *tp = NULL;
-	int s;
 	int error = 0;
 	int ostate = 0;
+	int s;
 
 	KASSERT(solocked(so));
 
@@ -841,8 +843,6 @@ tcp_connect(struct socket *so, struct mb
 
 	ostate = tcp_debug_capture(tp, PRU_CONNECT);
 
-	s = splsoftnet();
-
 	/*
 	 * Initiate connection to peer.
 	 * Create a template for use in transmissions on this connection.
@@ -850,6 +850,7 @@ tcp_connect(struct socket *so, struct mb
 	 * Start keep-alive timer, and seed output sequence space.
 	 * Send initial segment on connection.
 	 */
+	s = splsoftnet();
 #ifdef INET
 	if (inp) {
 		if (inp->inp_lport == 0) {
@@ -920,9 +921,9 @@ tcp_disconnect(struct socket *so)
 	struct inpcb *inp = NULL;
 	struct in6pcb *in6p = NULL;
 	struct tcpcb *tp = NULL;
-	int s;
 	int error = 0;
 	int ostate = 0;
+	int s;
 
 	KASSERT(solocked(so));
 
@@ -956,9 +957,9 @@ tcp_shutdown(struct socket *so)
 	struct inpcb *inp = NULL;
 	struct in6pcb *in6p = NULL;
 	struct tcpcb *tp = NULL;
-	int s;
 	int error = 0;
 	int ostate = 0;
+	int s;
 
 	KASSERT(solocked(so));
 
@@ -986,9 +987,9 @@ tcp_abort(struct socket *so)
 	struct inpcb *inp = NULL;
 	struct in6pcb *in6p = NULL;
 	struct tcpcb *tp = NULL;
-	int s;
 	int error = 0;
 	int ostate = 0;
+	int s;
 
 	KASSERT(solocked(so));
 
@@ -1042,12 +1043,14 @@ tcp_peeraddr(struct socket *so, struct m
 	struct tcpcb *tp = NULL;
 	int ostate = 0;
 	int error = 0;
+	int s;
 
 	if ((error = tcp_getpcb(so, &inp, &in6p, &tp)) != 0)
 		return error;
 
 	ostate = tcp_debug_capture(tp, PRU_PEERADDR);
 
+	s = splsoftnet();
 #ifdef INET
 	if (inp)
 		in_setpeeraddr(inp, nam);
@@ -1056,8 +1059,8 @@ tcp_peeraddr(struct socket *so, struct m
 	if (in6p)
 		in6_setpeeraddr(in6p, nam);
 #endif
-
 	tcp_debug_trace(so, tp, ostate, PRU_PEERADDR);
+	splx(s);
 
 	return 0;
 }
@@ -1070,12 +1073,14 @@ tcp_sockaddr(struct socket *so, struct m
 	struct tcpcb *tp = NULL;
 	int ostate = 0;
 	int error = 0;
+	int s;
 
 	if ((error = tcp_getpcb(so, &inp, &in6p, &tp)) != 0)
 		return error;
 
 	ostate = tcp_debug_capture(tp, PRU_SOCKADDR);
 
+	s = splsoftnet();
 #ifdef INET
 	if (inp)
 		in_setsockaddr(inp, nam);
@@ -1084,8 +1089,8 @@ tcp_sockaddr(struct socket *so, struct m
 	if (in6p)
 		in6_setsockaddr(in6p, nam);
 #endif
-
 	tcp_debug_trace(so, tp, ostate, PRU_SOCKADDR);
+	splx(s);
 
 	return 0;
 }
@@ -1098,20 +1103,26 @@ tcp_recvoob(struct socket *so, struct mb
 	struct tcpcb *tp = NULL;
 	int ostate = 0;
 	int error = 0;
+	int s;
 
 	if ((error = tcp_getpcb(so, &inp, &in6p, &tp)) != 0)
 		return error;
 
 	ostate = tcp_debug_capture(tp, PRU_RCVOOB);
 
+	s = splsoftnet();
 	if ((so->so_oobmark == 0 &&
 	    (so->so_state & SS_RCVATMARK) == 0) ||
 	    so->so_options & SO_OOBINLINE ||
-	    tp->t_oobflags & TCPOOB_HADDATA)
+	    tp->t_oobflags & TCPOOB_HADDATA) {
+		splx(s);
 		return EINVAL;
+	}
 
-	if ((tp->t_oobflags & TCPOOB_HAVEDATA) == 0)
+	if ((tp->t_oobflags & TCPOOB_HAVEDATA) == 0) {
+		splx(s);
 		return EWOULDBLOCK;
+	}
 
 	m->m_len = 1;
 	*mtod(m, char *) = tp->t_iobc;
@@ -1119,6 +1130,7 @@ tcp_recvoob(struct socket *so, struct mb
 		tp->t_oobflags ^= (TCPOOB_HAVEDATA | TCPOOB_HADDATA);
 
 	tcp_debug_trace(so, tp, ostate, PRU_RCVOOB);
+	splx(s);
 
 	return 0;
 }
@@ -1131,14 +1143,17 @@ tcp_sendoob(struct socket *so, struct mb
 	struct tcpcb *tp = NULL;
 	int ostate = 0;
 	int error = 0;
+	int s;
 
 	if ((error = tcp_getpcb(so, &inp, &in6p, &tp)) != 0)
 		return error;
 
 	ostate = tcp_debug_capture(tp, PRU_SENDOOB);
 
+	s = splsoftnet();
 	if (sbspace(&so->so_snd) < -512) {
 		m_freem(m);
+		splx(s);
 		return ENOBUFS;
 	}
 	/*
@@ -1154,8 +1169,8 @@ tcp_sendoob(struct socket *so, struct mb
 	tp->t_force = 1;
 	error = tcp_output(tp);
 	tp->t_force = 0;
-
 	tcp_debug_trace(so, tp, ostate, PRU_SENDOOB);
+	splx(s);
 
 	return error;
 }

Index: src/sys/netinet/udp_usrreq.c
diff -u src/sys/netinet/udp_usrreq.c:1.212 src/sys/netinet/udp_usrreq.c:1.213
--- src/sys/netinet/udp_usrreq.c:1.212	Thu Jul 31 03:39:35 2014
+++ src/sys/netinet/udp_usrreq.c	Sat Aug  2 03:55:26 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: udp_usrreq.c,v 1.212 2014/07/31 03:39:35 rtr Exp $	*/
+/*	$NetBSD: udp_usrreq.c,v 1.213 2014/08/02 03:55:26 rtr Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.212 2014/07/31 03:39:35 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.213 2014/08/02 03:55:26 rtr Exp $");
 
 #include "opt_inet.h"
 #include "opt_compat_netbsd.h"
@@ -1011,22 +1011,32 @@ udp_stat(struct socket *so, struct stat 
 static int
 udp_peeraddr(struct socket *so, struct mbuf *nam)
 {
+	int s;
+
 	KASSERT(solocked(so));
 	KASSERT(sotoinpcb(so) != NULL);
 	KASSERT(nam != NULL);
 
+	s = splsoftnet();
 	in_setpeeraddr(sotoinpcb(so), nam);
+	splx(s);
+
 	return 0;
 }
 
 static int
 udp_sockaddr(struct socket *so, struct mbuf *nam)
 {
+	int s;
+
 	KASSERT(solocked(so));
 	KASSERT(sotoinpcb(so) != NULL);
 	KASSERT(nam != NULL);
 
+	s = splsoftnet();
 	in_setsockaddr(sotoinpcb(so), nam);
+	splx(s);
+
 	return 0;
 }
 

Reply via email to