From 2a5f091dc309c562c765dc1dc859a4fea1bdef1e Mon Sep 17 00:00:00 2001 From: rwatson Date: Sat, 22 Apr 2006 19:10:02 +0000 Subject: 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 --- sys/netinet/in_pcb.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'sys/netinet/in_pcb.c') 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; -- cgit v1.1