[PATCH 3/3] lkdtm/bugs: Add CORRUPT_STACK_END to test the scheduler stack end check

From: Chris Down

Date: Tue Oct 27 2026 - 02:37:08 EST


There's no existing test for this, so let's add one.

Signed-off-by: Chris Down <chris@xxxxxxxxxxxxxx>
---
drivers/misc/lkdtm/bugs.c | 21 +++++++++++++++++++++
tools/testing/selftests/lkdtm/tests.txt | 1 +
2 files changed, 22 insertions(+)

diff --git a/drivers/misc/lkdtm/bugs.c b/drivers/misc/lkdtm/bugs.c
index 3eca2ef64aff..929a60db00d6 100644
--- a/drivers/misc/lkdtm/bugs.c
+++ b/drivers/misc/lkdtm/bugs.c
@@ -215,6 +215,26 @@ static noinline void lkdtm_CORRUPT_STACK_STRONG(void)
__lkdtm_CORRUPT_STACK((void *)&data);
}

+static void lkdtm_CORRUPT_STACK_END(void)
+{
+ unsigned long *stack_end = end_of_stack(current);
+
+ if (READ_ONCE(*stack_end) != STACK_END_MAGIC) {
+ pr_err("FAIL: stack end magic is already corrupted\n");
+ return;
+ }
+
+ pr_info("Corrupting stack end magic and calling schedule() ...\n");
+ WRITE_ONCE(*stack_end, ~STACK_END_MAGIC);
+ schedule_timeout_uninterruptible(1);
+
+ /* Still alive, so let's restore the magic so nothing else trips over it. */
+ WRITE_ONCE(*stack_end, STACK_END_MAGIC);
+ pr_err("FAIL: corrupted stack end was not detected by the scheduler\n");
+ pr_expected_config_param(CONFIG_SCHED_STACK_END_CHECK,
+ "sched_stack_end_check");
+}
+
static pid_t stack_pid;
static unsigned long stack_addr;

@@ -854,6 +874,7 @@ static struct crashtype crashtypes[] = {
CRASHTYPE(EXHAUST_STACK),
CRASHTYPE(CORRUPT_STACK),
CRASHTYPE(CORRUPT_STACK_STRONG),
+ CRASHTYPE(CORRUPT_STACK_END),
CRASHTYPE(REPORT_STACK),
CRASHTYPE(REPORT_STACK_CANARY),
CRASHTYPE(UNALIGNED_LOAD_STORE_WRITE),
diff --git a/tools/testing/selftests/lkdtm/tests.txt b/tools/testing/selftests/lkdtm/tests.txt
index bec57a02913a..2d856ed77a64 100644
--- a/tools/testing/selftests/lkdtm/tests.txt
+++ b/tools/testing/selftests/lkdtm/tests.txt
@@ -10,6 +10,7 @@ EXCEPTION
#EXHAUST_STACK Corrupts memory on failure
#CORRUPT_STACK Crashes entire system on success
#CORRUPT_STACK_STRONG Crashes entire system on success
+#CORRUPT_STACK_END Crashes entire system on success
ARRAY_BOUNDS call trace:|UBSAN: array-index-out-of-bounds
FAM_BOUNDS call trace:|UBSAN: array-index-out-of-bounds
PTR_BOUNDS call trace:|UBSAN: array-index-out-of-bounds
--
2.54.0