When these two syscalls have been marked NOLOCK, falloc(), fdinsert() & friends weren't ready to be executed without KERNEL_LOCK(). This is no longer true. kqueue(2), for example, do the same dances without this lock.
ok? Index: kern/uipc_syscalls.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_syscalls.c,v retrieving revision 1.184 diff -u -p -r1.184 uipc_syscalls.c --- kern/uipc_syscalls.c 15 Jan 2020 13:17:35 -0000 1.184 +++ kern/uipc_syscalls.c 27 May 2020 10:13:37 -0000 @@ -97,7 +97,6 @@ sys_socket(struct proc *p, void *v, regi if (error) return (error); - KERNEL_LOCK(); fdplock(fdp); error = falloc(p, &fp, &fd); if (error) { @@ -114,7 +113,6 @@ sys_socket(struct proc *p, void *v, regi FRELE(fp, p); *retval = fd; } - KERNEL_UNLOCK(); return (error); } @@ -450,7 +448,6 @@ sys_socketpair(struct proc *p, void *v, if (error != 0) goto free2; } - KERNEL_LOCK(); fdplock(fdp); if ((error = falloc(p, &fp1, &sv[0])) != 0) goto free3; @@ -475,7 +472,6 @@ sys_socketpair(struct proc *p, void *v, fdpunlock(fdp); FRELE(fp1, p); FRELE(fp2, p); - KERNEL_UNLOCK(); return (0); } fdremove(fdp, sv[1]); @@ -487,7 +483,6 @@ free4: so1 = NULL; free3: fdpunlock(fdp); - KERNEL_UNLOCK(); free2: if (so2 != NULL) (void)soclose(so2, 0);