Mechanical move that "unlocks" the errno(2) cases.
This is another step towards more read-only interface ioctls running
with the shared net lock alone.
Feedback? OK?
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 3fe9386f8af..47a381a1065 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -213,9 +213,7 @@ in6_control(struct socket *so, u_long cmd, caddr_t data,
struct ifnet *ifp)
break;
#endif /* MROUTING */
default:
- KERNEL_LOCK();
error = in6_ioctl(cmd, data, ifp, privileged);
- KERNEL_UNLOCK();
break;
}
@@ -225,23 +223,34 @@ in6_control(struct socket *so, u_long cmd, caddr_t data,
struct ifnet *ifp)
int
in6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp, int privileged)
{
+ int error;
+
if (ifp == NULL)
return (ENXIO);
switch (cmd) {
case SIOCGIFINFO_IN6:
case SIOCGNBRINFO_IN6:
- return (nd6_ioctl(cmd, data, ifp));
+ KERNEL_LOCK();
+ error = nd6_ioctl(cmd, data, ifp);
+ KERNEL_UNLOCK();
+ return (error);
case SIOCGIFDSTADDR_IN6:
case SIOCGIFNETMASK_IN6:
case SIOCGIFAFLAG_IN6:
case SIOCGIFALIFETIME_IN6:
- return (in6_ioctl_get(cmd, data, ifp));
+ KERNEL_LOCK();
+ error = in6_ioctl_get(cmd, data, ifp);
+ KERNEL_UNLOCK();
+ return (error);
case SIOCAIFADDR_IN6:
case SIOCDIFADDR_IN6:
if (!privileged)
return (EPERM);
- return (in6_ioctl_change_ifaddr(cmd, data, ifp));
+ KERNEL_LOCK();
+ error = in6_ioctl_change_ifaddr(cmd, data, ifp);
+ KERNEL_UNLOCK();
+ return (error);
case SIOCSIFADDR:
case SIOCSIFDSTADDR:
case SIOCSIFBRDADDR: