linux/fs/nfs
Mike Snitzer 3af870aedb nfs/localio: fix regression due to out-of-order __put_cred
Commit f2060bdc21 ("nfs/localio: add refcounting for each iocb IO
associated with NFS pgio header") inadvertantly reintroduced the same
potential for __put_cred() triggering BUG_ON(cred == current->cred) that
commit 992203a1fb ("nfs/localio: restore creds before releasing pageio
data") fixed.

Fix this by saving and restoring the cred around each {read,write}_iter
call within the respective for loop of nfs_local_call_{read,write} using
scoped_with_creds().

NOTE: this fix started by first reverting the following commits:

 94afb627df ("nfs: use credential guards in nfs_local_call_read()")
 bff3c841f7 ("nfs: use credential guards in nfs_local_call_write()")
 1d18101a64 ("Merge tag 'kernel-6.19-rc1.cred' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs")

followed by narrowly fixing the cred lifetime issue by using
scoped_with_creds().  In doing so, this commit's changes appear more
extensive than they really are (as evidenced by comparing to v6.18's
fs/nfs/localio.c).

Reported-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Acked-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Link: https://lore.kernel.org/linux-next/20251205111942.4150b06f@canb.auug.org.au/
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2025-12-05 17:53:56 -08:00
..
blocklayout NFS: Update the blocklayout to use xdr_set_scratch_folio() 2025-09-23 13:29:50 -04:00
filelayout NFS: Update the filelayout to use xdr_set_scratch_folio() 2025-09-23 13:29:50 -04:00
flexfilelayout NFSv4/flexfiles: fix to allocate mirror->dss before use 2025-10-13 14:33:00 -04:00
Kconfig nfs: add missing selections of CONFIG_CRC32 2025-04-13 16:39:42 -04:00
Makefile nfs: add LOCALIO support 2024-09-23 15:03:30 -04:00
cache_lib.c
cache_lib.h
callback.c SUNRPC: Move the svc_rpcb_cleanup() call sites 2025-09-23 13:28:19 -04:00
callback.h NFSv4: Add CB_GETATTR support for delegated attributes 2024-07-08 13:47:25 -04:00
callback_proc.c NFS: CB_OFFLOAD can return NFS4ERR_DELAY 2025-01-21 11:34:50 -05:00
callback_xdr.c nfsd: don't use sv_nrthreads in connection limiting calculations. 2025-01-06 09:37:36 -05:00
client.c NFS: Check the TLS certificate fields in nfs_match_client() 2025-11-10 10:32:28 -05:00
delegation.c NFS: use a hash table for delegation lookup 2025-07-22 08:10:41 -04:00
delegation.h NFS: use a hash table for delegation lookup 2025-07-22 08:10:41 -04:00
dir.c NFSv2/v3: Fix error handling in nfs_atomic_open_v23() 2025-11-10 14:30:45 -05:00
direct.c nfs: direct: drop useless initializer in nfs_direct_write_completion() 2025-04-27 23:25:44 -04:00
dns_resolve.c NFS: Move common includes outside ifdef 2023-08-24 13:24:15 -04:00
dns_resolve.h
export.c NFS: Fix filehandle bounds checking in nfs_fh_to_dentry() 2025-07-22 09:50:56 -04:00
file.c NFS: Enable use of the RWF_DONTCACHE flag on the NFS client 2025-09-23 13:29:50 -04:00
fs_context.c change the calling conventions for vfs_parse_fs_string() 2025-09-04 15:20:51 -04:00
fscache.c netfs: Fix undifferentiation of DIO reads from unbuffered reads 2025-05-23 10:35:03 +02:00
fscache.h netfs: Drop the was_async arg from netfs_read_subreq_terminated() 2024-12-20 22:34:03 +01:00
getroot.c nfs: fix the comment of nfs_get_root 2024-09-23 15:03:13 -04:00
inode.c vfs-6.19-rc1.inode 2025-12-01 09:02:34 -08:00
internal.h nfs/localio: add tracepoints for misaligned DIO READ and WRITE support 2025-09-30 16:10:30 -04:00
io.c NFS: Serialise O_DIRECT i/o and truncate() 2025-09-06 16:51:25 -04:00
iostat.h mm: add comments for allocation helpers explaining why they are macros 2024-07-12 15:52:20 -07:00
localio.c nfs/localio: fix regression due to out-of-order __put_cred 2025-12-05 17:53:56 -08:00
mount_clnt.c NFS: Remove unused function nfs_umount 2025-07-14 15:20:28 -07:00
namespace.c vfs_parse_fs_string() stuff 2025-10-03 10:51:44 -07:00
netns.h nfs: move the nfs4_data_server_cache into struct nfs_net 2025-04-27 23:25:44 -04:00
nfs.h NFS: Implement get_nfs_version() 2024-11-08 14:17:37 -05:00
nfs2super.c fs: nfs: add missing MODULE_DESCRIPTION() macros 2024-07-08 13:47:24 -04:00
nfs2xdr.c nfs/localio: add tracepoints for misaligned DIO READ and WRITE support 2025-09-30 16:10:30 -04:00
nfs3_fs.h
nfs3acl.c nfs: nfs3acl: drop useless assignment in nfs3_get_acl() 2025-04-27 23:25:44 -04:00
nfs3client.c pnfs: Set transport security policy to RPC_XPRTSEC_NONE unless using TLS 2025-11-10 10:32:28 -05:00
nfs3proc.c NFS client updates for Linux 6.15 2025-04-02 17:06:31 -07:00
nfs3super.c fs: nfs: add missing MODULE_DESCRIPTION() macros 2024-07-08 13:47:24 -04:00
nfs3xdr.c nfs/localio: add tracepoints for misaligned DIO READ and WRITE support 2025-09-30 16:10:30 -04:00
nfs4_fs.h NFSv4: Remove duplicate lookups, capability probes and fsinfo calls 2025-08-04 09:48:16 -07:00
nfs4client.c pnfs: Set transport security policy to RPC_XPRTSEC_NONE unless using TLS 2025-11-10 10:32:28 -05:00
nfs4file.c filelock: push the S_ISREG check down to ->setlease handlers 2025-11-12 09:38:35 +01:00
nfs4getroot.c NFSv4: Remove duplicate lookups, capability probes and fsinfo calls 2025-08-04 09:48:16 -07:00
nfs4idmap.c nfs: use credential guards in nfs_idmap_get_key() 2025-11-04 12:36:45 +01:00
nfs4idmap.h
nfs4namespace.c
nfs4proc.c NFSv4: Fix an incorrect parameter when calling nfs4_call_sync() 2025-11-10 14:30:46 -05:00
nfs4renewd.c fs: replace use of system_wq with system_percpu_wq 2025-09-19 16:15:07 +02:00
nfs4session.c
nfs4session.h nfs: add missing selections of CONFIG_CRC32 2025-04-13 16:39:42 -04:00
nfs4state.c NFSv4.1: fix mount hang after CREATE_SESSION failure 2025-09-23 13:28:19 -04:00
nfs4super.c do_nfs4_mount(): switch to vfs_parse_fs_string() 2025-09-04 15:20:58 -04:00
nfs4sysctl.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
nfs4trace.c pNFS: Add prepare commit trace to block/scsi layout 2025-07-14 15:20:28 -07:00
nfs4trace.h pNFS: Add prepare commit trace to block/scsi layout 2025-07-14 15:20:28 -07:00
nfs4xdr.c NFS: Update getacl to use xdr_set_scratch_folio() 2025-09-23 13:29:50 -04:00
nfs42.h NFS: Add support for fallocate(FALLOC_FL_ZERO_RANGE) 2025-05-28 17:17:13 -04:00
nfs42proc.c NFS: Update listxattr to use xdr_set_scratch_folio() 2025-09-23 13:29:50 -04:00
nfs42xattr.c mm/list_lru: simplify the list_lru walk callback function 2024-11-11 17:22:26 -08:00
nfs42xdr.c NFS: Update listxattr to use xdr_set_scratch_folio() 2025-09-23 13:29:50 -04:00
nfsroot.c NFS: Fix an off by one in root_nfs_cat() 2024-03-09 09:14:51 -05:00
nfstrace.c
nfstrace.h nfs/localio: add tracepoints for misaligned DIO READ and WRITE support 2025-09-30 16:10:30 -04:00
pagelist.c NFS: Fix a race when updating an existing write 2025-08-19 11:16:02 -07:00
pnfs.c Coccinelle-based conversion to use ->i_state accessors 2025-10-20 20:22:26 +02:00
pnfs.h nfs: don't share pNFS DS connections between net namespaces 2025-04-27 23:25:44 -04:00
pnfs_dev.c nfs: remove the unused max_deviceinfo_size field from struct pnfs_layoutdriver_type 2024-07-10 13:23:17 -04:00
pnfs_nfs.c pnfs: Fix TLS logic in _nfs4_pnfs_v4_ds_connect() 2025-11-10 10:32:28 -05:00
proc.c nfs: change mkdir inode_operation to return alternate dentry if needed. 2025-03-05 11:52:50 +01:00
read.c fs/nfs/read: fix double-unlock bug in nfs_return_empty_folio() 2025-05-28 17:17:13 -04:00
super.c new helper: set_default_d_op() 2025-06-10 22:21:16 -04:00
symlink.c fs: Pass a folio to page_put_link() 2025-05-15 12:14:29 +02:00
sysctl.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
sysfs.c NFS: sysfs: fix leak when nfs_client kobject add fails 2025-11-10 14:30:45 -05:00
sysfs.h
unlink.c VFS: rename lookup_one_len family to lookup_noperm and remove permission check 2025-04-08 11:24:36 +02:00
write.c NFS: check if suid/sgid was cleared after a write as needed 2025-10-13 14:33:00 -04:00