This was in fact in_ioctl_get().

---
Push kernel lock into nd6_ioctl()

Purely mechanical.

Feedback? OK?
---
 sys/netinet6/in6.c | 2 --
 sys/netinet6/nd6.c | 5 +++++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 65f4b44e700..3c5b47bc1ed 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -231,9 +231,7 @@ in6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp, int 
privileged)
        switch (cmd) {
        case SIOCGIFINFO_IN6:
        case SIOCGNBRINFO_IN6:
-               KERNEL_LOCK();
                error = nd6_ioctl(cmd, data, ifp);
-               KERNEL_UNLOCK();
                return (error);
        case SIOCGIFDSTADDR_IN6:
        case SIOCGIFNETMASK_IN6:
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index d88969be617..716946ab831 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -1018,9 +1018,11 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp)
 
        switch (cmd) {
        case SIOCGIFINFO_IN6:
+               KERNEL_LOCK();
                NET_LOCK_SHARED();
                ndi->ndi = *ND_IFINFO(ifp);
                NET_UNLOCK_SHARED();
+               KERNEL_UNLOCK();
                return (0);
        case SIOCGNBRINFO_IN6:
        {
@@ -1028,6 +1030,7 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp)
                struct in6_addr nb_addr = nbi->addr; /* make local for safety */
                time_t expire;
 
+               KERNEL_LOCK();
                NET_LOCK_SHARED();
                /*
                 * XXX: KAME specific hack for scoped addresses
@@ -1046,6 +1049,7 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp)
                    (ln = (struct llinfo_nd6 *)rt->rt_llinfo) == NULL) {
                        rtfree(rt);
                        NET_UNLOCK_SHARED();
+                       KERNEL_UNLOCK();
                        return (EINVAL);
                }
                expire = ln->ln_rt->rt_expire;
@@ -1061,6 +1065,7 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp)
 
                rtfree(rt);
                NET_UNLOCK_SHARED();
+               KERNEL_UNLOCK();
                return (0);
        }
        }
-- 
2.38.1

Reply via email to