diff options
| author | Yang Erkun <[email protected]> | 2024-10-21 14:23:41 +0000 |
|---|---|---|
| committer | Chuck Lever <[email protected]> | 2024-11-19 01:23:05 +0000 |
| commit | be8f982c369c965faffa198b46060f8853e0f1f0 (patch) | |
| tree | fb5c0899a06426fefcf6eda6d4189ddeadac5671 /rust/helpers/task.c | |
| parent | lockd: Remove unneeded initialization of file_lock::c.flc_flags (diff) | |
| download | kernel-be8f982c369c965faffa198b46060f8853e0f1f0.tar.gz kernel-be8f982c369c965faffa198b46060f8853e0f1f0.zip | |
nfsd: make sure exp active before svc_export_show
The function `e_show` was called with protection from RCU. This only
ensures that `exp` will not be freed. Therefore, the reference count for
`exp` can drop to zero, which will trigger a refcount use-after-free
warning when `exp_get` is called. To resolve this issue, use
`cache_get_rcu` to ensure that `exp` remains active.
------------[ cut here ]------------
refcount_t: addition on 0; use-after-free.
WARNING: CPU: 3 PID: 819 at lib/refcount.c:25
refcount_warn_saturate+0xb1/0x120
CPU: 3 UID: 0 PID: 819 Comm: cat Not tainted 6.12.0-rc3+ #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
1.16.1-2.fc37 04/01/2014
RIP: 0010:refcount_warn_saturate+0xb1/0x120
...
Call Trace:
<TASK>
e_show+0x20b/0x230 [nfsd]
seq_read_iter+0x589/0x770
seq_read+0x1e5/0x270
vfs_read+0x125/0x530
ksys_read+0xc1/0x160
do_syscall_64+0x5f/0x170
entry_SYSCALL_64_after_hwframe+0x76/0x7e
Fixes: bf18f163e89c ("NFSD: Using exp_get for export getting")
Cc: [email protected] # 4.20+
Signed-off-by: Yang Erkun <[email protected]>
Reviewed-by: Jeff Layton <[email protected]>
Signed-off-by: Chuck Lever <[email protected]>
Diffstat (limited to 'rust/helpers/task.c')
0 files changed, 0 insertions, 0 deletions
