Unlock in6_ioctl_get() aka. SIOCGIF{DSTADDR,NETMASK,AFLAG,ALIFETIME}_IN6
authorkn <kn@openbsd.org>
Fri, 2 Dec 2022 12:56:51 +0000 (12:56 +0000)
committerkn <kn@openbsd.org>
Fri, 2 Dec 2022 12:56:51 +0000 (12:56 +0000)
commit4e88faf97e1f6bfd45003c5ccd81179b23c6a96b
tree4ddb1e710f3fc0160c6d2eba53f3a129458baffb
parent38658a45323edb55ceedd27b787e3e0c27bce96b
Unlock in6_ioctl_get() aka. SIOCGIF{DSTADDR,NETMASK,AFLAG,ALIFETIME}_IN6

First the right address is picked from the net lock protected if_addrlist.
Then all ioctls just copy out the address, nothing requires the kernel lock.

SIOCGIFDSTADDR_IN6 checks the net lock protected if_flags,
SIOCGIFALIFETIME_IN6 computes lifetimes which only need the address.

This removes the last kernel lock from IPv6 read ioctls (multicast being
the untouched exception here).

Users of these ioctl(2)s are route6d(8), rad(8), slaacd(8), isakmpd(8) and
of course ifconfig(8).

OK mvs
sys/netinet6/in6.c