summaryrefslogtreecommitdiff
path: root/fs/read_write.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2023-09-28 05:11:26 +0300
committerAl Viro <viro@zeniv.linux.org.uk>2024-02-25 10:10:32 +0300
commitc1b967d03c5d570ed7b90a88031fa2af34bf5b20 (patch)
tree230fde52c95cc00c8d08bdc2a49d119ccd79a325 /fs/read_write.c
parent10a973fc4fb22390a8d362dd3265ec2c9a81d84c (diff)
downloadlinux-c1b967d03c5d570ed7b90a88031fa2af34bf5b20.tar.xz
nfs: fix UAF on pathwalk running into umount
NFS ->d_revalidate(), ->permission() and ->get_link() need to access some parts of nfs_server when called in RCU mode: server->flags server->caps *(server->io_stats) and, worst of all, call server->nfs_client->rpc_ops->have_delegation (the last one - as NFS_PROTO(inode)->have_delegation()). We really don't want to RCU-delay the entire nfs_free_server() (it would have to be done with schedule_work() from RCU callback, since it can't be made to run from interrupt context), but actual freeing of nfs_server and ->io_stats can be done via call_rcu() just fine. nfs_client part is handled simply by making nfs_free_client() use kfree_rcu(). Acked-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/read_write.c')
0 files changed, 0 insertions, 0 deletions