mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-03 09:00:21 +00:00
Move lock assertions to top of in6_pcbladdr(): we still want them to run
even if we're going to return an argument-based error. Assert pcbinfo lock in in6_pcblookup_local(), in6_pcblookup_hash(), since they walk pcbinfo inpcb lists. Assert inpcb and pcbinfo locks in in6_pcbsetport(), since port reservations are changing. MFC after: 3 months
This commit is contained in:
parent
102ea03373
commit
8deea4a8f3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=158011
@ -297,6 +297,9 @@ in6_pcbladdr(inp, nam, plocal_addr6)
|
||||
struct ifnet *ifp = NULL;
|
||||
int scope_ambiguous = 0;
|
||||
|
||||
INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo);
|
||||
INP_LOCK_ASSERT(inp);
|
||||
|
||||
if (nam->sa_len != sizeof (*sin6))
|
||||
return (EINVAL);
|
||||
if (sin6->sin6_family != AF_INET6)
|
||||
@ -309,9 +312,6 @@ in6_pcbladdr(inp, nam, plocal_addr6)
|
||||
if ((error = sa6_embedscope(sin6, ip6_use_defzone)) != 0)
|
||||
return(error);
|
||||
|
||||
INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo);
|
||||
INP_LOCK_ASSERT(inp);
|
||||
|
||||
if (in6_ifaddr) {
|
||||
/*
|
||||
* If the destination address is UNSPECIFIED addr,
|
||||
@ -723,6 +723,8 @@ in6_pcblookup_local(pcbinfo, laddr, lport_arg, wild_okay)
|
||||
int matchwild = 3, wildcard;
|
||||
u_short lport = lport_arg;
|
||||
|
||||
INP_INFO_WLOCK_ASSERT(pcbinfo);
|
||||
|
||||
if (!wild_okay) {
|
||||
struct inpcbhead *head;
|
||||
/*
|
||||
@ -888,6 +890,8 @@ in6_pcblookup_hash(pcbinfo, faddr, fport_arg, laddr, lport_arg, wildcard, ifp)
|
||||
u_short fport = fport_arg, lport = lport_arg;
|
||||
int faith;
|
||||
|
||||
INP_INFO_RLOCK_ASSERT(pcbinfo);
|
||||
|
||||
if (faithprefix_p != NULL)
|
||||
faith = (*faithprefix_p)(laddr);
|
||||
else
|
||||
|
@ -760,6 +760,9 @@ in6_pcbsetport(laddr, inp, cred)
|
||||
int count, error = 0, wild = 0;
|
||||
struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
|
||||
|
||||
INP_INFO_WLOCK_ASSERT(pcbinfo);
|
||||
INP_LOCK_ASSERT(inp);
|
||||
|
||||
/* XXX: this is redundant when called from in6_pcbbind */
|
||||
if ((so->so_options & (SO_REUSEADDR|SO_REUSEPORT)) == 0)
|
||||
wild = INPLOOKUP_WILDCARD;
|
||||
|
Loading…
Reference in New Issue
Block a user