diff options
| author | HyungJung Joo <jhj140711@gmail.com> | 2026-03-17 14:45:56 +0900 |
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2026-03-17 15:36:06 +0100 |
| commit | d227786ab1119669df4dc333a61510c52047cce4 (patch) | |
| tree | 9d7e0fb48898026cceabaef9bfbce0eb7a09c8fe /drivers/message/i2o/git@git.tavy.me:linux.git | |
| parent | 0621c385fda1376e967f37ccd534c26c3e511d14 (diff) | |
fs/mbcache: cancel shrink work before destroying the cache
mb_cache_destroy() calls shrinker_free() and then frees all cache
entries and the cache itself, but it does not cancel the pending
c_shrink_work work item first.
If mb_cache_entry_create() schedules c_shrink_work via schedule_work()
and the work item is still pending or running when mb_cache_destroy()
runs, mb_cache_shrink_worker() will access the cache after its memory
has been freed, causing a use-after-free.
This is only reachable by a privileged user (root or CAP_SYS_ADMIN)
who can trigger the last put of a mounted ext2/ext4/ocfs2 filesystem.
Cancel the work item with cancel_work_sync() before calling
shrinker_free(), ensuring the worker has finished and will not be
rescheduled before the cache is torn down.
Fixes: c2f3140fe2ec ("mbcache2: limit cache size")
Signed-off-by: Hyungjung Joo <jhj140711@gmail.com>
Link: https://patch.msgid.link/20260317054556.1821600-1-jhj140711@gmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'drivers/message/i2o/git@git.tavy.me:linux.git')
0 files changed, 0 insertions, 0 deletions
