git: 03e9e83f3586 - main - nfs_nfsdserv.c: Clip number of callback slots
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 05 May 2026 00:05:37 UTC
The branch main has been updated by rmacklem:
URL: https://cgit.FreeBSD.org/src/commit/?id=03e9e83f358678bab5e4c1ddf9c9d8faa7183cbb
commit 03e9e83f358678bab5e4c1ddf9c9d8faa7183cbb
Author: Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2026-05-05 00:04:00 +0000
Commit: Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2026-05-05 00:04:00 +0000
nfs_nfsdserv.c: Clip number of callback slots
The client tells the server how many callback slots
it can handle in the callback session. However, the
NFSv4.1/4.2 server can only handle a maximum of
NFSV4_SLOTS slots. This patch clips the client's
value to that, to avoid using too high a slot#
for a callback.
Fortunately, I do not know of an extant client that
specifies a value greater than NFSV4_SLOTS, so this
patch is not really needed, as yet. Also, the client
rarely uses a slot# above 0 when doing callbacks.
MFC after: 2 weeks
---
sys/fs/nfsserver/nfs_nfsdserv.c | 8 ++++++++
1 file changed, 8 insertions(+)
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)