]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSv4.1: fix backchannel max_resp_sz verification check
authorAnthony Iliopoulos <ailiop@suse.com>
Wed, 13 Aug 2025 09:00:46 +0000 (11:00 +0200)
committerAnna Schumaker <anna.schumaker@oracle.com>
Tue, 23 Sep 2025 17:28:19 +0000 (13:28 -0400)
When the client max_resp_sz is larger than what the server encodes in
its reply, the nfs4_verify_back_channel_attrs() check fails and this
causes nfs4_proc_create_session() to fail, in cases where the client
page size is larger than that of the server and the server does not want
to negotiate upwards.

While this is not a problem with the linux nfs server that will reflect
the proposed value in its reply irrespective of the local page size,
other nfs server implementations may insist on their own max_resp_sz
value, which could be smaller.

Fix this by accepting smaller max_resp_sz values from the server, as
this does not violate the protocol. The server is allowed to decrease
but not increase proposed the size, and as such values smaller than the
client-proposed ones are valid.

Fixes: 43c2e885be25 ("nfs4: fix channel attribute sanity-checks")
Signed-off-by: Anthony Iliopoulos <ailiop@suse.com>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
fs/nfs/nfs4proc.c

index 297b7c7c0b1bf8b25c279e0b98e4c5710a6a0c68..4de3e4bd724b7ee8d5eb0b862706b48f67141ff6 100644 (file)
@@ -9442,7 +9442,7 @@ static int nfs4_verify_back_channel_attrs(struct nfs41_create_session_args *args
                goto out;
        if (rcvd->max_rqst_sz > sent->max_rqst_sz)
                return -EINVAL;
-       if (rcvd->max_resp_sz < sent->max_resp_sz)
+       if (rcvd->max_resp_sz > sent->max_resp_sz)
                return -EINVAL;
        if (rcvd->max_resp_sz_cached > sent->max_resp_sz_cached)
                return -EINVAL;