> On 10 Nov 2022, at 13:54, Klemens Nanni <k...@openbsd.org> wrote: > > Purely mechanical, then in6_control() and in_control() can be pushed > further individually. > > Feedback? OK?
SS_PRIV is immutable, no reason to check it with kernel lock held. > --- > 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 >