aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2008-08-31 13:16:45 +0000
committerRobert Watson <rwatson@FreeBSD.org>2008-08-31 13:16:45 +0000
commit7a0a0eecf019c1a0008ffd6d95b0747f4071b487 (patch)
tree31d76d037333cdadfae01cf366386c8640ac42c2
parent72cf344f9cc970d957dd2244f0cee75de0044f4e (diff)
downloadsrc-7a0a0eecf019c1a0008ffd6d95b0747f4071b487.tar.gz
src-7a0a0eecf019c1a0008ffd6d95b0747f4071b487.zip
In UDPv6, reduce scope of global udbinfo lock during append to last
matching socket by dropping it before udp6_append(), and remove duplicate unlocks of udbinfo and inpcb in sysctl return path. MFC after: 3 days
Notes
Notes: svn path=/head/; revision=182537
-rw-r--r--sys/netinet6/udp6_usrreq.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/sys/netinet6/udp6_usrreq.c b/sys/netinet6/udp6_usrreq.c
index f593e6ff4eff..fa943d56c3f9 100644
--- a/sys/netinet6/udp6_usrreq.c
+++ b/sys/netinet6/udp6_usrreq.c
@@ -308,9 +308,9 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
goto badheadlocked;
}
INP_RLOCK(last);
+ INP_INFO_RUNLOCK(&V_udbinfo);
udp6_append(last, m, off, &fromsa);
INP_RUNLOCK(last);
- INP_INFO_RUNLOCK(&V_udbinfo);
return (IPPROTO_DONE);
}
/*
@@ -465,8 +465,6 @@ udp6_getcred(SYSCTL_HANDLER_ARGS)
INP_INFO_RUNLOCK(&V_udbinfo);
error = ENOENT;
}
- INP_RUNLOCK(inp);
- INP_INFO_RUNLOCK(&V_udbinfo);
if (error == 0)
error = SYSCTL_OUT(req, &xuc, sizeof(struct xucred));
return (error);