aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/fs/nfsserver/nfs_nfsdserv.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/fs/nfsserver/nfs_nfsdserv.c b/sys/fs/nfsserver/nfs_nfsdserv.c
index 855d018e72d2..ad0f495bbd69 100644
--- a/sys/fs/nfsserver/nfs_nfsdserv.c
+++ b/sys/fs/nfsserver/nfs_nfsdserv.c
@@ -4869,6 +4869,14 @@ nfsrvd_createsession(struct nfsrv_descript *nd, __unused int isdgram,
*tl++ = txdr_unsigned(sep->sess_cbsess.nfsess_foreslots);
*tl++ = txdr_unsigned(1);
*tl = txdr_unsigned(0); /* No RDMA. */
+ /*
+ * Although the client accepts slot#s up to
+ * sess_cbsess.nfsess_foreslots, the server can only use
+ * a maximum of NFSV4_SLOTS, so clip it to avoid ever using
+ * too high a slot.
+ */
+ if (sep->sess_cbsess.nfsess_foreslots > NFSV4_SLOTS)
+ sep->sess_cbsess.nfsess_foreslots = NFSV4_SLOTS;
}
nfsmout:
if (nd->nd_repstat != 0 && sep != NULL)