public inbox for linux-fsdevel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fs/mbcache: cancel shrink work before destroying the cache
@ 2026-03-17  5:45 Hyungjung Joo
  2026-03-17 14:38 ` Christian Brauner
  2026-03-18 18:23 ` Jan Kara
  0 siblings, 2 replies; 5+ messages in thread
From: Hyungjung Joo @ 2026-03-17  5:45 UTC (permalink / raw)
  To: viro, brauner, linux-fsdevel; +Cc: jack, greg, linux-kernel, HyungJung Joo

From: HyungJung Joo <jhj140711@gmail.com>

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.

Signed-off-by: Hyungjung Joo <jhj140711@gmail.com>
---
 fs/mbcache.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/fs/mbcache.c b/fs/mbcache.c
index 480d02d6ebf0..2a6319b4072c 100644
--- a/fs/mbcache.c
+++ b/fs/mbcache.c
@@ -406,6 +406,7 @@ void mb_cache_destroy(struct mb_cache *cache)
 {
 	struct mb_cache_entry *entry, *next;
 
+	cancel_work_sync(&cache->c_shrink_work);
 	shrinker_free(cache->c_shrink);
 
 	/*
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-03-18 18:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-17  5:45 [PATCH] fs/mbcache: cancel shrink work before destroying the cache Hyungjung Joo
2026-03-17 14:38 ` Christian Brauner
2026-03-17 15:43   ` Hyungjung Joo
2026-03-18  9:42     ` Christian Brauner
2026-03-18 18:23 ` Jan Kara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox