diff options
author | Al Viro | 2023-09-27 22:11:26 -0400 |
---|---|---|
committer | Al Viro | 2024-02-25 02:10:32 -0500 |
commit | c1b967d03c5d570ed7b90a88031fa2af34bf5b20 (patch) | |
tree | 230fde52c95cc00c8d08bdc2a49d119ccd79a325 /arch | |
parent | 10a973fc4fb22390a8d362dd3265ec2c9a81d84c (diff) |
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 'arch')
0 files changed, 0 insertions, 0 deletions