From 28e1c240f635d84b296526eeed6891ea76a86568 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 17 Aug 2022 19:24:02 +0200 Subject: [PATCH] 5.19-stable patches added patches: revert-mm-kfence-apply-kmemleak_ignore_phys-on-early-allocated-pool.patch --- ..._ignore_phys-on-early-allocated-pool.patch | 100 ++++++++++++++++++ queue-5.19/series | 1 + 2 files changed, 101 insertions(+) create mode 100644 queue-5.19/revert-mm-kfence-apply-kmemleak_ignore_phys-on-early-allocated-pool.patch diff --git a/queue-5.19/revert-mm-kfence-apply-kmemleak_ignore_phys-on-early-allocated-pool.patch b/queue-5.19/revert-mm-kfence-apply-kmemleak_ignore_phys-on-early-allocated-pool.patch new file mode 100644 index 00000000000..ee04fd30b4a --- /dev/null +++ b/queue-5.19/revert-mm-kfence-apply-kmemleak_ignore_phys-on-early-allocated-pool.patch @@ -0,0 +1,100 @@ +From elver@google.com Wed Aug 17 19:23:19 2022 +From: Marco Elver +Date: Tue, 16 Aug 2022 18:36:41 +0200 +Subject: Revert "mm: kfence: apply kmemleak_ignore_phys on early allocated pool" +To: elver@google.com, stable@vger.kernel.org, Greg Kroah-Hartman +Cc: Alexander Potapenko , Dmitry Vyukov , Andrew Morton , kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Will Deacon , Catalin Marinas , Yee Lee , Max Schulze +Message-ID: <20220816163641.2359996-1-elver@google.com> + +From: Marco Elver + +This reverts commit 07313a2b29ed1079eaa7722624544b97b3ead84b. + +Commit 0c24e061196c21d5 ("mm: kmemleak: add rbtree and store physical +address for objects allocated with PA") is not yet in 5.19 (but appears +in 6.0). Without 0c24e061196c21d5, kmemleak still stores phys objects +and non-phys objects in the same tree, and ignoring (instead of freeing) +will cause insertions into the kmemleak object tree by the slab +post-alloc hook to conflict with the pool object (see comment). + +Reports such as the following would appear on boot, and effectively +disable kmemleak: + + | kmemleak: Cannot insert 0xffffff806e24f000 into the object search tree (overlaps existing) + | CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.19.0-v8-0815+ #5 + | Hardware name: Raspberry Pi Compute Module 4 Rev 1.0 (DT) + | Call trace: + | dump_backtrace.part.0+0x1dc/0x1ec + | show_stack+0x24/0x80 + | dump_stack_lvl+0x8c/0xb8 + | dump_stack+0x1c/0x38 + | create_object.isra.0+0x490/0x4b0 + | kmemleak_alloc+0x3c/0x50 + | kmem_cache_alloc+0x2f8/0x450 + | __proc_create+0x18c/0x400 + | proc_create_reg+0x54/0xd0 + | proc_create_seq_private+0x94/0x120 + | init_mm_internals+0x1d8/0x248 + | kernel_init_freeable+0x188/0x388 + | kernel_init+0x30/0x150 + | ret_from_fork+0x10/0x20 + | kmemleak: Kernel memory leak detector disabled + | kmemleak: Object 0xffffff806e24d000 (size 2097152): + | kmemleak: comm "swapper", pid 0, jiffies 4294892296 + | kmemleak: min_count = -1 + | kmemleak: count = 0 + | kmemleak: flags = 0x5 + | kmemleak: checksum = 0 + | kmemleak: backtrace: + | kmemleak_alloc_phys+0x94/0xb0 + | memblock_alloc_range_nid+0x1c0/0x20c + | memblock_alloc_internal+0x88/0x100 + | memblock_alloc_try_nid+0x148/0x1ac + | kfence_alloc_pool+0x44/0x6c + | mm_init+0x28/0x98 + | start_kernel+0x178/0x3e8 + | __primary_switched+0xc4/0xcc + +Reported-by: Max Schulze +Signed-off-by: Marco Elver +Link: https://lore.kernel.org/all/b33b33bc-2d06-1bcd-2df7-43678962b728@online.de/ +Signed-off-by: Greg Kroah-Hartman +--- + mm/kfence/core.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +--- a/mm/kfence/core.c ++++ b/mm/kfence/core.c +@@ -603,6 +603,14 @@ static unsigned long kfence_init_pool(vo + addr += 2 * PAGE_SIZE; + } + ++ /* ++ * The pool is live and will never be deallocated from this point on. ++ * Remove the pool object from the kmemleak object tree, as it would ++ * otherwise overlap with allocations returned by kfence_alloc(), which ++ * are registered with kmemleak through the slab post-alloc hook. ++ */ ++ kmemleak_free(__kfence_pool); ++ + return 0; + } + +@@ -615,16 +623,8 @@ static bool __init kfence_init_pool_earl + + addr = kfence_init_pool(); + +- if (!addr) { +- /* +- * The pool is live and will never be deallocated from this point on. +- * Ignore the pool object from the kmemleak phys object tree, as it would +- * otherwise overlap with allocations returned by kfence_alloc(), which +- * are registered with kmemleak through the slab post-alloc hook. +- */ +- kmemleak_ignore_phys(__pa(__kfence_pool)); ++ if (!addr) + return true; +- } + + /* + * Only release unprotected pages, and do not try to go back and change diff --git a/queue-5.19/series b/queue-5.19/series index e69de29bb2d..9eea793d381 100644 --- a/queue-5.19/series +++ b/queue-5.19/series @@ -0,0 +1 @@ +revert-mm-kfence-apply-kmemleak_ignore_phys-on-early-allocated-pool.patch -- 2.47.3