Purely mechanical, then in6_control() and in_control() can be pushed further individually.
Feedback? OK? --- sys/kern/sys_socket.c | 2 -- sys/netinet/in.c | 4 ++++ sys/netinet6/in6.c | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c index b07119b71cd..e42dd948006 100644 --- a/sys/kern/sys_socket.c +++ b/sys/kern/sys_socket.c @@ -134,9 +134,7 @@ soo_ioctl(struct file *fp, u_long cmd, caddr_t data, struct proc *p) } if (IOCGROUP(cmd) == 'r') return (EOPNOTSUPP); - KERNEL_LOCK(); error = pru_control(so, cmd, data, NULL); - KERNEL_UNLOCK(); break; } diff --git a/sys/netinet/in.c b/sys/netinet/in.c index cd8289d2e89..990aaf84c8a 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -202,6 +202,8 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp) int privileged; int error; + KERNEL_LOCK(); + privileged = 0; if ((so->so_state & SS_PRIV) != 0) privileged++; @@ -218,6 +220,8 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp) break; } + KERNEL_UNLOCK(); + return error; } diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index 900456fff1a..a51ca2fa5a4 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -199,6 +199,8 @@ in6_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp) int privileged; int error; + KERNEL_LOCK(); + privileged = 0; if ((so->so_state & SS_PRIV) != 0) privileged++; @@ -215,6 +217,8 @@ in6_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp) break; } + KERNEL_UNLOCK(); + return error; } -- 2.38.1