summaryrefslogtreecommitdiffstats
path: root/sys/netinet6
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2006-04-12 02:52:14 +0000
committerrwatson <rwatson@FreeBSD.org>2006-04-12 02:52:14 +0000
commit6f0c2ddcfaa3a4664869e1374795f1b1c1f67500 (patch)
treec69125e29d0164cb4b760e5f6e0f72ae4d65f0b7 /sys/netinet6
parentecc538ef6d168031bf9fba9bf9d2464cdef70ae9 (diff)
downloadFreeBSD-src-6f0c2ddcfaa3a4664869e1374795f1b1c1f67500.zip
FreeBSD-src-6f0c2ddcfaa3a4664869e1374795f1b1c1f67500.tar.gz
Remove spl use from IPv6 inpcb code.
In various inpcb methods for IPv6 sockets, don't check of so_pcb is NULL, assert it isn't. MFC after: 3 months
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/in6_pcb.c38
1 files changed, 13 insertions, 25 deletions
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index cc0d678..d860363 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -513,20 +513,15 @@ in6_setsockaddr(so, nam)
struct socket *so;
struct sockaddr **nam;
{
- int s;
register struct inpcb *inp;
struct in6_addr addr;
in_port_t port;
- s = splnet();
inp = sotoinpcb(so);
- if (!inp) {
- splx(s);
- return EINVAL;
- }
+ KASSERT(inp != NULL, ("in6_setsockaddr: inp == NULL"));
+
port = inp->inp_lport;
addr = inp->in6p_laddr;
- splx(s);
*nam = in6_sockaddr(port, &addr);
return 0;
@@ -537,20 +532,15 @@ in6_setpeeraddr(so, nam)
struct socket *so;
struct sockaddr **nam;
{
- int s;
struct inpcb *inp;
struct in6_addr addr;
in_port_t port;
- s = splnet();
inp = sotoinpcb(so);
- if (!inp) {
- splx(s);
- return EINVAL;
- }
+ KASSERT(inp != NULL, ("in6_setpeeraddr: inp == NULL"));
+
port = inp->inp_fport;
addr = inp->in6p_faddr;
- splx(s);
*nam = in6_sockaddr(port, &addr);
return 0;
@@ -559,11 +549,12 @@ in6_setpeeraddr(so, nam)
int
in6_mapped_sockaddr(struct socket *so, struct sockaddr **nam)
{
- struct inpcb *inp = sotoinpcb(so);
+ struct inpcb *inp;
int error;
- if (inp == NULL)
- return EINVAL;
+ inp = sotoinpcb(so);
+ KASSERT(inp != NULL, ("in6_mapped_sockaddr: inp == NULL"));
+
if ((inp->inp_vflag & (INP_IPV4 | INP_IPV6)) == INP_IPV4) {
error = in_setsockaddr(so, nam, &tcbinfo);
if (error == 0)
@@ -579,11 +570,12 @@ in6_mapped_sockaddr(struct socket *so, struct sockaddr **nam)
int
in6_mapped_peeraddr(struct socket *so, struct sockaddr **nam)
{
- struct inpcb *inp = sotoinpcb(so);
+ struct inpcb *inp;
int error;
- if (inp == NULL)
- return EINVAL;
+ inp = sotoinpcb(so);
+ KASSERT(inp != NULL, ("in6_mapped_peeraddr: inp == NULL"));
+
if ((inp->inp_vflag & (INP_IPV4 | INP_IPV6)) == INP_IPV4) {
error = in_setpeeraddr(so, nam, &tcbinfo);
if (error == 0)
@@ -603,8 +595,6 @@ in6_mapped_peeraddr(struct socket *so, struct sockaddr **nam)
* cmds that are uninteresting (e.g., no error in the map).
* Call the protocol specific routine (if any) to report
* any errors for each matching socket.
- *
- * Must be called at splnet.
*/
void
in6_pcbnotify(pcbinfo, dst, fport_arg, src, lport_arg, cmd, cmdarg, notify)
@@ -621,7 +611,7 @@ in6_pcbnotify(pcbinfo, dst, fport_arg, src, lport_arg, cmd, cmdarg, notify)
struct sockaddr_in6 sa6_src, *sa6_dst;
u_short fport = fport_arg, lport = lport_arg;
u_int32_t flowinfo;
- int errno, s;
+ int errno;
if ((unsigned)cmd >= PRC_NCMDS || dst->sa_family != AF_INET6)
return;
@@ -653,7 +643,6 @@ in6_pcbnotify(pcbinfo, dst, fport_arg, src, lport_arg, cmd, cmdarg, notify)
notify = in6_rtchange;
}
errno = inet6ctlerrmap[cmd];
- s = splnet();
head = pcbinfo->listhead;
INP_INFO_WLOCK(pcbinfo);
for (inp = LIST_FIRST(head); inp != NULL; inp = ninp) {
@@ -714,7 +703,6 @@ in6_pcbnotify(pcbinfo, dst, fport_arg, src, lport_arg, cmd, cmdarg, notify)
INP_UNLOCK(inp);
}
INP_INFO_WUNLOCK(pcbinfo);
- splx(s);
}
/*
OpenPOWER on IntegriCloud