From 086dafc15b751a05e7e6716f4e9828fb22fceaef Mon Sep 17 00:00:00 2001 From: Robert Watson Date: Sat, 15 Apr 2006 05:24:23 +0000 Subject: [PATCH] Mirror IPv4 pcb locking into in6_setsockaddr() and in6_setpeeraddr(): acquire inpcb lock when reading inpcb port+address in order to prevent races with other threads that may be changing them. MFC after: 3 months --- sys/netinet6/in6_pcb.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c index d860363b284..d331da3e1a8 100644 --- a/sys/netinet6/in6_pcb.c +++ b/sys/netinet6/in6_pcb.c @@ -520,8 +520,10 @@ in6_setsockaddr(so, nam) inp = sotoinpcb(so); KASSERT(inp != NULL, ("in6_setsockaddr: inp == NULL")); + INP_LOCK(inp); port = inp->inp_lport; addr = inp->in6p_laddr; + INP_UNLOCK(inp); *nam = in6_sockaddr(port, &addr); return 0; @@ -539,8 +541,10 @@ in6_setpeeraddr(so, nam) inp = sotoinpcb(so); KASSERT(inp != NULL, ("in6_setpeeraddr: inp == NULL")); + INP_LOCK(inp); port = inp->inp_fport; addr = inp->in6p_faddr; + INP_UNLOCK(inp); *nam = in6_sockaddr(port, &addr); return 0;