Lock kernel in nfsrv_rcv() because NFS subsystem is not MP-safe yet.
authorvisa <visa@openbsd.org>
Sun, 22 May 2022 04:52:17 +0000 (04:52 +0000)
committervisa <visa@openbsd.org>
Sun, 22 May 2022 04:52:17 +0000 (04:52 +0000)
Tested in snaps for a week.

OK bluhm@

sys/nfs/nfs_socket.c

index a20986e..aa93938 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: nfs_socket.c,v 1.140 2022/03/17 14:23:34 visa Exp $   */
+/*     $OpenBSD: nfs_socket.c,v 1.141 2022/05/22 04:52:17 visa Exp $   */
 /*     $NetBSD: nfs_socket.c,v 1.27 1996/04/15 20:20:00 thorpej Exp $  */
 
 /*
@@ -1561,8 +1561,10 @@ nfsrv_rcv(struct socket *so, caddr_t arg, int waitflag)
        struct uio auio;
        int flags, error;
 
+       KERNEL_LOCK();
+
        if ((slp->ns_flag & SLP_VALID) == 0)
-               return;
+               goto out;
 
        /* Defer soreceive() to an nfsd. */
        if (waitflag == M_DONTWAIT) {
@@ -1644,6 +1646,9 @@ dorecs:
        if (waitflag == M_DONTWAIT &&
                (slp->ns_rec || (slp->ns_flag & (SLP_NEEDQ | SLP_DISCONN))))
                nfsrv_wakenfsd(slp);
+
+out:
+       KERNEL_UNLOCK();
 }
 
 /*