From: Greg Kroah-Hartman Date: Mon, 8 May 2023 08:10:47 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v5.15.111~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a28d64d38fcae534d8914e3a57915e42a10270a8;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: debugobject-ensure-pool-refill-again.patch --- diff --git a/queue-5.4/debugobject-ensure-pool-refill-again.patch b/queue-5.4/debugobject-ensure-pool-refill-again.patch new file mode 100644 index 00000000000..bac9c9572ed --- /dev/null +++ b/queue-5.4/debugobject-ensure-pool-refill-again.patch @@ -0,0 +1,80 @@ +From 0af462f19e635ad522f28981238334620881badc Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Mon, 1 May 2023 17:42:06 +0200 +Subject: debugobject: Ensure pool refill (again) + +From: Thomas Gleixner + +commit 0af462f19e635ad522f28981238334620881badc upstream. + +The recent fix to ensure atomicity of lookup and allocation inadvertently +broke the pool refill mechanism. + +Prior to that change debug_objects_activate() and debug_objecs_assert_init() +invoked debug_objecs_init() to set up the tracking object for statically +initialized objects. That's not longer the case and debug_objecs_init() is +now the only place which does pool refills. + +Depending on the number of statically initialized objects this can be +enough to actually deplete the pool, which was observed by Ido via a +debugobjects OOM warning. + +Restore the old behaviour by adding explicit refill opportunities to +debug_objects_activate() and debug_objecs_assert_init(). + +Fixes: 63a759694eed ("debugobject: Prevent init race with static objects") +Reported-by: Ido Schimmel +Signed-off-by: Thomas Gleixner +Tested-by: Ido Schimmel +Link: https://lore.kernel.org/r/871qk05a9d.ffs@tglx +Signed-off-by: Greg Kroah-Hartman +--- + lib/debugobjects.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +--- a/lib/debugobjects.c ++++ b/lib/debugobjects.c +@@ -563,6 +563,16 @@ static struct debug_obj *lookup_object_o + return NULL; + } + ++static void debug_objects_fill_pool(void) ++{ ++ /* ++ * On RT enabled kernels the pool refill must happen in preemptible ++ * context: ++ */ ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT) || preemptible()) ++ fill_pool(); ++} ++ + static void + __debug_object_init(void *addr, struct debug_obj_descr *descr, int onstack) + { +@@ -571,7 +581,7 @@ __debug_object_init(void *addr, struct d + struct debug_obj *obj; + unsigned long flags; + +- fill_pool(); ++ debug_objects_fill_pool(); + + db = get_bucket((unsigned long) addr); + +@@ -656,6 +666,8 @@ int debug_object_activate(void *addr, st + if (!debug_objects_enabled) + return 0; + ++ debug_objects_fill_pool(); ++ + db = get_bucket((unsigned long) addr); + + raw_spin_lock_irqsave(&db->lock, flags); +@@ -865,6 +877,8 @@ void debug_object_assert_init(void *addr + if (!debug_objects_enabled) + return; + ++ debug_objects_fill_pool(); ++ + db = get_bucket((unsigned long) addr); + + raw_spin_lock_irqsave(&db->lock, flags); diff --git a/queue-5.4/series b/queue-5.4/series index c5c6902502b..32dd310b43e 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -208,3 +208,4 @@ dm-flakey-fix-a-crash-with-invalid-table-line.patch dm-ioctl-fix-nested-locking-in-table_clear-to-remove-deadlock-concern.patch perf-auxtrace-fix-address-filter-entire-kernel-size.patch perf-intel-pt-fix-cyc-timestamps-after-standalone-cbr.patch +debugobject-ensure-pool-refill-again.patch