kernel_samsung_a53x/fs/nfsd
Chuck Lever 7bba5c16ef NFSD: Fix the behavior of READ near OFFSET_MAX
[ Upstream commit 0cb4d23ae08c48f6bf3c29a8e5c4a74b8388b960 ]

Dan Aloni reports:
> Due to commit 8cfb9015280d ("NFS: Always provide aligned buffers to
> the RPC read layers") on the client, a read of 0xfff is aligned up
> to server rsize of 0x1000.
>
> As a result, in a test where the server has a file of size
> 0x7fffffffffffffff, and the client tries to read from the offset
> 0x7ffffffffffff000, the read causes loff_t overflow in the server
> and it returns an NFS code of EINVAL to the client. The client as
> a result indefinitely retries the request.

The Linux NFS client does not handle NFS?ERR_INVAL, even though all
NFS specifications permit servers to return that status code for a
READ.

Instead of NFS?ERR_INVAL, have out-of-range READ requests succeed
and return a short result. Set the EOF flag in the result to prevent
the client from retrying the READ request. This behavior appears to
be consistent with Solaris NFS servers.

Note that NFSv3 and NFSv4 use u64 offset values on the wire. These
must be converted to loff_t internally before use -- an implicit
type cast is not adequate for this purpose. Otherwise VFS checks
against sb->s_maxbytes do not work properly.

Reported-by: Dan Aloni <dan.aloni@vastdata.com>
Cc: stable@vger.kernel.org
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-19 12:27:53 +01:00
..
acl.h
auth.c
auth.h
blocklayout.c
blocklayoutxdr.c
blocklayoutxdr.h
cache.h
current_stateid.h
export.c nfsd: report per-export stats 2024-11-19 12:27:31 +01:00
export.h nfsd: report per-export stats 2024-11-19 12:27:31 +01:00
fault_inject.c
filecache.c NFSD: Rename boot verifier functions 2024-11-19 12:27:52 +01:00
filecache.h
flexfilelayout.c
flexfilelayoutxdr.c
flexfilelayoutxdr.h
idmap.h
Kconfig NFSv4.2: Remove ifdef CONFIG_NFSD from NFSv4.2 client SSC code. 2024-11-19 12:27:37 +01:00
lockd.c Keep read and write fds with each nlm_file 2024-11-19 12:27:44 +01:00
Makefile
netns.h NFSD: Rename boot verifier functions 2024-11-19 12:27:52 +01:00
nfs2acl.c SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
nfs3acl.c SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
nfs3proc.c NFSD: Fix the behavior of READ near OFFSET_MAX 2024-11-19 12:27:53 +01:00
nfs3xdr.c NFSD: Move fill_pre_wcc() and fill_post_wcc() 2024-11-19 12:27:53 +01:00
nfs4acl.c
nfs4callback.c nfsd: rpc_peeraddr2str needs rcu lock 2024-11-19 12:27:39 +01:00
nfs4idmap.c
nfs4layouts.c
nfs4proc.c NFSD: Fix the behavior of READ near OFFSET_MAX 2024-11-19 12:27:53 +01:00
nfs4recover.c nfsd: Log client tracking type log message as info instead of warning 2024-11-19 12:27:36 +01:00
nfs4state.c nfsd: fix crash on COPY_NOTIFY with special stateid 2024-11-19 12:27:53 +01:00
nfs4xdr.c NFSD: Fix the behavior of READ near OFFSET_MAX 2024-11-19 12:27:53 +01:00
nfscache.c NFSD: Remove be32_to_cpu() from DRC hash function 2024-11-19 12:27:51 +01:00
nfsctl.c NFSD: Clean up the nfsd_net::nfssvc_boot field 2024-11-19 12:27:52 +01:00
nfsd.h SUNRPC/NFSD: clean up get/put functions. 2024-11-19 12:27:50 +01:00
nfsfh.c NFSD: Move fill_pre_wcc() and fill_post_wcc() 2024-11-19 12:27:53 +01:00
nfsfh.h NFSD: Move fill_pre_wcc() and fill_post_wcc() 2024-11-19 12:27:53 +01:00
nfsproc.c nfsd: Retry once in nfsd_open on an -EOPENSTALE return 2024-11-19 12:27:52 +01:00
nfssvc.c NFSD: Rename boot verifier functions 2024-11-19 12:27:52 +01:00
nfsxdr.c SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
pnfs.h
state.h nfsd4: add refcount for nfsd4_blocked_lock 2024-11-19 12:27:52 +01:00
stats.c nfsd: make nfsd_stats.th_cnt atomic_t 2024-11-19 12:27:50 +01:00
stats.h nfsd: make nfsd_stats.th_cnt atomic_t 2024-11-19 12:27:50 +01:00
trace.c NFSD: Add SPDX header for fs/nfsd/trace.c 2024-11-19 12:27:20 +01:00
trace.h NFSD: Trace boot verifier resets 2024-11-19 12:27:52 +01:00
vfs.c NFSD: Move fill_pre_wcc() and fill_post_wcc() 2024-11-19 12:27:53 +01:00
vfs.h nfsd: Add a tracepoint for errors in nfsd4_clone_file_range() 2024-11-19 12:27:52 +01:00
xdr.h SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
xdr3.h SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
xdr4.h SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
xdr4cb.h