mirror of
https://github.com/opnsense/src.git
synced 2026-06-10 09:11:07 -04:00
Use reference counting instead of locking to secure an address while
that address is being used to generate temporary IPv6 address. This approach is sufficient and avoids recursive locking. MFC after: 3 days
This commit is contained in:
parent
443e752d97
commit
c1752bcd65
1 changed files with 6 additions and 3 deletions
|
|
@ -764,22 +764,25 @@ regen_tmpaddr(struct in6_ifaddr *ia6)
|
|||
*/
|
||||
if (!IFA6_IS_DEPRECATED(it6))
|
||||
public_ifa6 = it6;
|
||||
|
||||
if (public_ifa6 != NULL)
|
||||
ifa_ref(&public_ifa6->ia_ifa);
|
||||
}
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
|
||||
if (public_ifa6 != NULL) {
|
||||
int e;
|
||||
|
||||
if ((e = in6_tmpifadd(public_ifa6, 0, 0)) != 0) {
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
ifa_free(&public_ifa6->ia_ifa);
|
||||
log(LOG_NOTICE, "regen_tmpaddr: failed to create a new"
|
||||
" tmp addr,errno=%d\n", e);
|
||||
return (-1);
|
||||
}
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
ifa_free(&public_ifa6->ia_ifa);
|
||||
return (0);
|
||||
}
|
||||
|
||||
IF_ADDR_UNLOCK(ifp);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue