diff options
author | rwatson <rwatson@FreeBSD.org> | 2006-04-22 19:10:02 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2006-04-22 19:10:02 +0000 |
commit | 2a5f091dc309c562c765dc1dc859a4fea1bdef1e (patch) | |
tree | fd7b7f28d6c54d3616a64c3c4ed4605cff8fd6b9 /sys | |
parent | 08414eb70ca4391b529a9ca57978a1364a8a79b9 (diff) | |
download | FreeBSD-src-2a5f091dc309c562c765dc1dc859a4fea1bdef1e.zip FreeBSD-src-2a5f091dc309c562c765dc1dc859a4fea1bdef1e.tar.gz |
Remove pcbinfo locking from in_setsockaddr() and in_setpeeraddr();
holding the inpcb lock is sufficient to prevent races in reading
the address and port, as both the inpcb lock and pcbinfo lock are
required to change the address/port.
Improve consistency of spelling in assertions about inp != NULL.
MFC after: 3 months
Diffstat (limited to 'sys')
-rw-r--r-- | sys/netinet/in_pcb.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index 20c56ed..26602cc 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -759,14 +759,13 @@ in_setsockaddr(struct socket *so, struct sockaddr **nam, struct in_addr addr; in_port_t port; - INP_INFO_RLOCK(pcbinfo); inp = sotoinpcb(so); - KASSERT(inp != NULL, ("in_setsockaddr: so_pcb == NULL")); + KASSERT(inp != NULL, ("in_setsockaddr: inp == NULL")); + INP_LOCK(inp); port = inp->inp_lport; addr = inp->inp_laddr; INP_UNLOCK(inp); - INP_INFO_RUNLOCK(pcbinfo); *nam = in_sockaddr(port, &addr); return 0; @@ -783,14 +782,13 @@ in_setpeeraddr(struct socket *so, struct sockaddr **nam, struct in_addr addr; in_port_t port; - INP_INFO_RLOCK(pcbinfo); inp = sotoinpcb(so); - KASSERT(inp != NULL, ("in_setpeeraddr: so_pcb == NULL")); + KASSERT(inp != NULL, ("in_setpeeraddr: inp == NULL")); + INP_LOCK(inp); port = inp->inp_fport; addr = inp->inp_faddr; INP_UNLOCK(inp); - INP_INFO_RUNLOCK(pcbinfo); *nam = in_sockaddr(port, &addr); return 0; |