Kill two simple recursive splsoftnet().
- pr_usrreq() functions are always called under NET_LOCK().
- tcp_ident() is called by tcp_sysctl() only which asserts for the NET_LOCK()
ok?
Index: netinet/ip_gre.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_gre.c,v
retrieving revision 1.59
diff -u -p -r1.59 ip_gre.c
--- netinet/ip_gre.c 4 Mar 2016 22:38:23 -0000 1.59
+++ netinet/ip_gre.c 2 Jan 2017 11:34:01 -0000
@@ -411,12 +411,10 @@ gre_usrreq(struct socket *so, int req, s
struct inpcb *inp = sotoinpcb(so);
if (inp != NULL && inp->inp_pipex && req == PRU_SEND) {
- int s;
struct sockaddr_in *sin4;
struct in_addr *ina_dst;
struct pipex_session *session;
- s = splsoftnet();
ina_dst = NULL;
if ((so->so_state & SS_ISCONNECTED) != 0) {
inp = sotoinpcb(so);
@@ -432,7 +430,6 @@ gre_usrreq(struct socket *so, int req, s
(session = pipex_pptp_userland_lookup_session_ipv4(m,
*ina_dst)))
m = pipex_pptp_userland_output(m, session);
- splx(s);
if (m == NULL)
return (ENOMEM);
Index: netinet/tcp_usrreq.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v
retrieving revision 1.140
diff -u -p -r1.140 tcp_usrreq.c
--- netinet/tcp_usrreq.c 26 Dec 2016 21:30:10 -0000 1.140
+++ netinet/tcp_usrreq.c 2 Jan 2017 11:30:56 -0000
@@ -732,7 +732,7 @@ tcp_usrclosed(struct tcpcb *tp)
int
tcp_ident(void *oldp, size_t *oldlenp, void *newp, size_t newlen, int dodrop)
{
- int error = 0, s;
+ int error = 0;
struct tcp_ident_mapping tir;
struct inpcb *inp;
struct tcpcb *tp = NULL;
@@ -741,6 +741,9 @@ tcp_ident(void *oldp, size_t *oldlenp, v
struct sockaddr_in6 *fin6, *lin6;
struct in6_addr f6, l6;
#endif
+
+ splsoftassert(IPL_SOFTNET);
+
if (dodrop) {
if (oldp != NULL || *oldlenp != 0)
return (EINVAL);
@@ -781,7 +784,6 @@ tcp_ident(void *oldp, size_t *oldlenp, v
return (EINVAL);
}
- s = splsoftnet();
switch (tir.faddr.ss_family) {
#ifdef INET6
case AF_INET6:
@@ -803,7 +805,6 @@ tcp_ident(void *oldp, size_t *oldlenp, v
tp = tcp_drop(tp, ECONNABORTED);
else
error = ESRCH;
- splx(s);
return (error);
}
@@ -830,7 +831,6 @@ tcp_ident(void *oldp, size_t *oldlenp, v
tir.ruid = -1;
tir.euid = -1;
}
- splx(s);
*oldlenp = sizeof (tir);
error = copyout((void *)&tir, oldp, sizeof (tir));