The quilt patch titled Subject: debugobjects: turn off debug_objects_enabled from debug_objects_oom() has been removed from the -mm tree. Its filename was debugobjects-turn-off-debug_objects_enabled-from-debug_objects_oom.patch This patch was dropped because it was nacked ------------------------------------------------------ From: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> Subject: debugobjects: turn off debug_objects_enabled from debug_objects_oom() Date: Mon, 29 May 2023 23:39:12 +0900 syzbot is reporting false positive ODEBUG message immediately after ODEBUG was disabled due to OOM. [ 1062.309646][T22911] ODEBUG: Out of memory. ODEBUG disabled [ 1062.886755][ T5171] ------------[ cut here ]------------ [ 1062.892770][ T5171] ODEBUG: assert_init not available (active state 0) object: ffffc900056afb20 object type: timer_list hint: process_timeout+0x0/0x40 This race happened because debug_objects_oom() emitted OOM message but did not turn off debug_objects_enabled, and debug_print_object() did not check debug_objects_enabled when calling WARN(). CPU 0 [ T5171] CPU 1 [T22911] -------------- -------------- debug_object_assert_init() { if (!debug_objects_enabled) return; db = get_bucket((unsigned long) addr); // Finds a bucket, but... debug_objects_oom() { pr_warn("Out of memory. ODEBUG disabled "); // all buckets get emptied here, and... hlist_move_list(&db->list, &freelist); } lookup_object_or_alloc(addr, db, descr, false, true) { lookup_object(addr, b) { return NULL; // this bucket is already empty. } if (!descr->is_static_object || !descr->is_static_object(addr)) return ERR_PTR(-ENOENT); } if (!obj) { // obj == ERR_PTR(-ENOENT) because non-static object. debug_objects_oom(); return; } debug_print_object(&o, "assert_init") { // False positive due to not checking debug_objects_enabled. WARN(1, KERN_ERR "ODEBUG: %s %s (active state %u) " "object: %p object type: %s hint: %pS ", ...); } } Link: https://lkml.kernel.org/r/1af29817-4698-c5ac-cf63-0dad289e740f@xxxxxxxxxxxxxxxxxxx Reported-by: syzbot <syzbot+7937ba6a50bdd00fffdf@xxxxxxxxxxxxxxxxxxxxxxxxx> Closes: https://syzkaller.appspot.com/bug?extid=7937ba6a50bdd00fffdf Signed-off-by: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Stephen Boyd <swboyd@xxxxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: wuchi <wuchi.zero@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- lib/debugobjects.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) --- a/lib/debugobjects.c~debugobjects-turn-off-debug_objects_enabled-from-debug_objects_oom +++ a/lib/debugobjects.c @@ -466,6 +466,7 @@ static void debug_objects_oom(void) unsigned long flags; int i; + debug_objects_enabled = 0; pr_warn("Out of memory. ODEBUG disabled\n"); for (i = 0; i < ODEBUG_HASH_SIZE; i++, db++) { @@ -502,10 +503,10 @@ static void debug_print_object(struct de void *hint = descr->debug_hint ? descr->debug_hint(obj->object) : NULL; limit++; - WARN(1, KERN_ERR "ODEBUG: %s %s (active state %u) " - "object: %p object type: %s hint: %pS\n", - msg, obj_states[obj->state], obj->astate, - obj->object, descr->name, hint); + WARN(debug_objects_enabled, KERN_ERR + "ODEBUG: %s %s (active state %u) object: %p object type: %s hint: %pS\n", + msg, obj_states[obj->state], obj->astate, + obj->object, descr->name, hint); } debug_objects_warnings++; } _ Patches currently in -mm which might be from penguin-kernel@xxxxxxxxxxxxxxxxxxx are workingset-refactor-lru-refault-to-expose-refault-recency-check-fix.patch kasankmsan-remove-__gfp_kswapd_reclaim-usage-from-kasan-kmsan.patch mm-page_alloc-dont-wake-kswapd-from-rmqueue-unless-__gfp_kswapd_reclaim-is-specified.patch