]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm-shrinkers-fix-double-kfree-on-shrinker-name-fix
authorRoman Gushchin <roman.gushchin@linux.dev>
Wed, 20 Jul 2022 16:29:45 +0000 (09:29 -0700)
committerakpm <akpm@linux-foundation.org>
Wed, 20 Jul 2022 21:41:30 +0000 (14:41 -0700)
zero shrinker->name in all cases where shrinker->name is freed

Link: https://lkml.kernel.org/r/YtgteTnQTgyuKUSY@castle
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/shrinker_debug.c
mm/vmscan.c

index e5b40c43221d07a335f900cd7ea6df54535a3134..b05295bab3222645b8cb029f10f5148e03ce3e13 100644 (file)
@@ -251,6 +251,7 @@ void shrinker_debugfs_remove(struct shrinker *shrinker)
        lockdep_assert_held(&shrinker_rwsem);
 
        kfree_const(shrinker->name);
+       shrinker->name = NULL;
 
        if (!shrinker->debugfs_entry)
                return;
index f8d97b905f210fbcd243983de096dfb2c06730fa..fbb4108250ee4efab573f49f14bb636c6f902d0a 100644 (file)
@@ -644,8 +644,10 @@ int prealloc_shrinker(struct shrinker *shrinker, const char *fmt, ...)
                return -ENOMEM;
 
        err = __prealloc_shrinker(shrinker);
-       if (err)
+       if (err) {
                kfree_const(shrinker->name);
+               shrinker->name = NULL;
+       }
 
        return err;
 }
@@ -660,6 +662,7 @@ void free_prealloced_shrinker(struct shrinker *shrinker)
 {
 #ifdef CONFIG_SHRINKER_DEBUG
        kfree_const(shrinker->name);
+       shrinker->name = NULL;
 #endif
        if (shrinker->flags & SHRINKER_MEMCG_AWARE) {
                down_write(&shrinker_rwsem);