Unlock SIOCGIFCONF
authorkn <kn@openbsd.org>
Mon, 14 Nov 2022 22:07:30 +0000 (22:07 +0000)
committerkn <kn@openbsd.org>
Mon, 14 Nov 2022 22:07:30 +0000 (22:07 +0000)
As netintro(4) explains, this copies a bunch of data from the global
interface list as well as its per-interface address lists.

All of this is never written to by ifconf(), protected by the net lock
and documented as such in the struct comments already.

OK mvs

sys/net/if.c

index e80b50f..d62b40b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if.c,v 1.678 2022/11/14 22:06:25 kn Exp $     */
+/*     $OpenBSD: if.c,v 1.679 2022/11/14 22:07:30 kn Exp $     */
 /*     $NetBSD: if.c,v 1.35 1996/05/07 05:26:04 thorpej Exp $  */
 
 /*
@@ -2419,11 +2419,9 @@ ifioctl_get(u_long cmd, caddr_t data)
 
        switch(cmd) {
        case SIOCGIFCONF:
-               KERNEL_LOCK();
                NET_LOCK_SHARED();
                error = ifconf(data);
                NET_UNLOCK_SHARED();
-               KERNEL_UNLOCK();
                return (error);
        case SIOCIFGCLONERS:
                error = if_clone_list((struct if_clonereq *)data);