Mostafa Saleh
61b36bdc70
ubsan: Fix panic from test_ubsan_out_of_bounds
...
[ Upstream commit 9b044614be12d78d3a93767708b8d02fb7dfa9b0 ]
Running lib_ubsan.ko on arm64 (without CONFIG_UBSAN_TRAP) panics the
kernel:
[ 31.616546] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: test_ubsan_out_of_bounds+0x158/0x158 [test_ubsan]
[ 31.646817] CPU: 3 UID: 0 PID: 179 Comm: insmod Not tainted 6.15.0-rc2 #1 PREEMPT
[ 31.648153] Hardware name: linux,dummy-virt (DT)
[ 31.648970] Call trace:
[ 31.649345] show_stack+0x18/0x24 (C)
[ 31.650960] dump_stack_lvl+0x40/0x84
[ 31.651559] dump_stack+0x18/0x24
[ 31.652264] panic+0x138/0x3b4
[ 31.652812] __ktime_get_real_seconds+0x0/0x10
[ 31.653540] test_ubsan_load_invalid_value+0x0/0xa8 [test_ubsan]
[ 31.654388] init_module+0x24/0xff4 [test_ubsan]
[ 31.655077] do_one_initcall+0xd4/0x280
[ 31.655680] do_init_module+0x58/0x2b4
That happens because the test corrupts other data in the stack:
400: d5384108 mrs x8, sp_el0
404: f9426d08 ldr x8, [x8, #1240 ]
408: f85f83a9 ldur x9, [x29, #-8]
40c: eb09011f cmp x8, x9
410: 54000301 b.ne 470 <test_ubsan_out_of_bounds+0x154> // b.any
As there is no guarantee the compiler will order the local variables
as declared in the module:
volatile char above[4] = { }; /* Protect surrounding memory. */
volatile int arr[4];
volatile char below[4] = { }; /* Protect surrounding memory. */
There is another problem where the out-of-bound index is 5 which is larger
than the extra surrounding memory for protection.
So, use a struct to enforce the ordering, and fix the index to be 4.
Also, remove some of the volatiles and rely on OPTIMIZER_HIDE_VAR()
Signed-off-by: Mostafa Saleh <smostafa@google.com >
Link: https://lore.kernel.org/r/20250415203354.4109415-1-smostafa@google.com
Signed-off-by: Kees Cook <kees@kernel.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2025-05-02 07:47:08 +02:00
..
2025-04-10 14:33:34 +02:00
2022-08-26 18:40:14 +08:00
2023-05-24 17:32:31 +01:00
2022-12-31 13:31:56 +01:00
2024-07-11 12:47:08 +02:00
2022-06-15 10:29:10 +02:00
2022-07-17 17:31:39 -07:00
2022-07-29 18:12:34 -07:00
2024-08-29 17:30:14 +02:00
2024-02-23 09:12:49 +01:00
2021-07-08 11:48:20 -07:00
2022-03-08 15:20:21 -08:00
2022-10-11 17:42:58 -06:00
2022-02-13 16:50:06 -08:00
2022-11-23 19:50:15 +01:00
2024-10-17 15:20:58 +02:00
2020-08-10 01:32:59 +09:00
2020-12-29 15:36:49 -08:00
2021-09-24 16:13:35 -07:00
2023-12-13 18:39:04 +01:00
2022-04-26 17:58:51 -04:00
2020-11-18 14:15:17 -06:00
2022-01-20 08:52:55 +02:00
2022-06-01 18:29:06 -07:00
2021-12-13 10:56:09 +01:00
2021-10-01 16:52:48 -04:00
2022-08-02 17:14:47 -06:00
2021-05-06 19:24:12 -07:00
2020-10-16 13:25:14 -06:00
2023-07-19 16:21:58 +02:00
2022-04-26 17:58:51 -04:00
2024-10-17 15:22:10 +02:00
2020-06-11 15:14:53 +02:00
2022-06-16 19:58:21 -07:00
2023-03-10 09:33:47 +01:00
2025-03-28 21:58:57 +01:00
2022-09-01 16:55:35 +02:00
2020-08-20 15:45:14 -04:00
2023-08-30 16:11:08 +02:00
2024-03-26 18:20:28 -04:00
2022-09-11 21:55:06 -07:00
2021-10-01 16:52:48 -04:00
2023-06-14 11:15:22 +02:00
2022-10-06 05:57:36 -07:00
2022-10-01 10:22:57 -07:00
2021-01-21 14:06:00 -07:00
2021-05-06 19:24:12 -07:00
2022-01-31 11:21:43 +11:00
2022-01-31 11:21:43 +11:00
2022-03-07 12:48:35 -07:00
2022-03-07 12:48:35 -07:00
2022-06-07 10:27:38 +02:00
2020-06-18 17:26:43 +10:00
2021-08-19 09:02:55 +09:00
2021-06-22 13:56:43 +02:00
2024-10-17 15:21:22 +02:00
2024-08-03 08:49:38 +02:00
2021-07-01 11:06:06 -07:00
2021-05-06 19:24:12 -07:00
2021-07-01 11:06:06 -07:00
2021-10-19 23:44:30 +08:00
2021-11-08 16:55:26 -08:00
2020-07-31 11:49:08 +02:00
2021-08-13 14:09:32 -10:00
2022-09-01 18:04:43 +02:00
2020-11-20 14:45:33 +11:00
2022-04-22 21:30:57 +02:00
2024-05-17 11:56:20 +02:00
2020-10-16 11:11:20 -07:00
2022-09-11 21:55:10 -07:00
2023-12-08 08:51:15 +01:00
2022-07-17 17:31:38 -07:00
2020-12-15 22:46:15 -08:00
2021-01-03 20:05:18 -05:00
2020-10-16 11:11:22 -07:00
2022-11-22 18:50:44 -08:00
2022-10-11 17:42:55 -06:00
2022-10-06 05:57:36 -07:00
2022-09-19 14:35:08 +02:00
2022-09-14 07:04:15 -07:00
2022-03-07 12:48:35 -07:00
2022-01-15 08:47:31 -08:00
2024-09-12 11:10:25 +02:00
2022-04-29 14:38:01 -07:00
2024-01-10 17:10:36 +01:00
2022-04-27 10:57:33 -07:00
2024-01-20 11:50:09 +01:00
2022-10-03 14:03:21 -07:00
2022-10-03 14:03:18 -07:00
2022-04-13 21:32:21 +02:00
2022-09-07 16:37:27 -07:00
2021-08-19 09:02:55 +09:00
2022-10-10 13:04:25 -07:00
2025-02-21 13:49:29 +01:00
2022-10-03 14:02:57 -07:00
2022-04-22 12:32:04 +02:00
2022-03-22 15:57:11 -07:00
2022-10-11 12:01:24 +02:00
2022-11-08 15:57:24 -08:00
2022-07-14 15:45:26 -07:00
2021-07-08 11:48:20 -07:00
2024-08-03 08:49:39 +02:00
2023-09-23 11:11:07 +02:00
2022-05-13 07:20:13 -07:00
2021-05-19 15:05:11 +02:00
2020-10-16 11:11:19 -07:00
2021-08-13 18:37:38 +02:00
2022-06-16 19:58:20 -07:00
2021-07-08 11:48:20 -07:00
2022-04-05 13:32:27 -06:00
2022-09-11 21:55:06 -07:00
2021-12-04 10:56:24 +01:00
2023-02-01 08:34:34 +01:00
2022-03-11 10:42:56 +01:00
2021-02-17 17:31:06 -06:00
2022-07-17 17:31:37 -07:00
2024-01-10 17:10:33 +01:00
2025-02-21 13:49:55 +01:00
2024-03-26 18:20:28 -04:00
2020-09-26 10:33:57 -07:00
2024-03-06 14:45:06 +00:00
2022-04-22 21:30:57 +02:00
2022-12-31 13:31:58 +01:00
2024-08-03 08:49:05 +02:00
2021-07-08 11:48:20 -07:00
2022-10-03 17:34:32 -07:00
2025-04-10 14:33:42 +02:00
2021-09-17 13:52:17 +01:00
2021-04-16 16:10:37 -07:00
2021-07-01 11:06:05 -07:00
2024-04-03 15:19:25 +02:00
2021-05-06 19:24:12 -07:00
2022-05-18 02:20:17 -04:00
2022-05-22 11:32:30 -07:00
2023-08-30 16:11:08 +02:00
2022-10-11 17:42:58 -06:00
2022-08-24 13:46:57 +01:00
2020-08-12 10:58:00 -07:00
2022-02-06 11:05:28 +00:00
2021-07-08 11:48:20 -07:00
2021-07-08 11:48:20 -07:00
2024-10-17 15:21:10 +02:00
2022-07-17 17:31:39 -07:00
2021-07-08 11:48:20 -07:00
2022-09-23 16:46:19 +02:00
2025-04-25 10:43:41 +02:00
2022-09-26 19:46:29 -07:00
2022-06-03 10:34:34 -07:00
2024-06-12 11:03:04 +02:00
2022-07-17 17:31:41 -07:00
2022-03-17 20:17:18 -07:00
2024-05-02 16:29:29 +02:00
2024-12-14 19:54:37 +01:00
2024-12-14 19:54:06 +01:00
2025-04-25 10:43:55 +02:00
2022-04-19 21:58:47 +02:00
2022-04-19 21:58:47 +02:00
2021-06-18 11:43:09 +02:00
2023-08-11 12:08:10 +02:00
2021-07-08 11:48:20 -07:00
2020-08-12 10:58:00 -07:00
2024-03-26 18:20:33 -04:00
2022-06-22 19:20:20 -07:00
2022-09-07 17:04:49 +02:00
2023-08-03 10:24:19 +02:00
2023-10-25 12:03:12 +02:00
2021-01-18 11:03:26 +01:00
2022-07-17 17:14:36 -07:00
2022-01-20 08:52:54 +02:00
2022-10-11 17:42:55 -06:00
2022-10-12 18:51:50 -07:00
2024-06-12 11:03:29 +02:00
2024-01-20 11:50:09 +01:00
2022-03-29 15:13:36 -07:00
2022-10-11 17:42:58 -06:00
2022-10-11 17:42:55 -06:00
2022-02-25 09:36:06 +01:00
2023-11-02 09:35:24 +01:00
2023-10-15 18:32:41 +02:00
2022-10-11 17:42:58 -06:00
2022-10-11 17:42:58 -06:00
2022-07-28 10:38:30 +02:00
2021-12-06 16:04:44 -08:00
2022-10-26 13:39:09 +01:00
2023-09-19 12:28:05 +02:00
2022-05-19 18:54:22 +02:00
2021-09-08 11:50:26 -07:00
2022-04-29 14:38:00 -07:00
2022-05-03 10:15:07 +02:00
2025-05-02 07:47:08 +02:00
2022-10-11 17:42:58 -06:00
2024-10-17 15:21:26 +02:00
2022-10-11 17:42:55 -06:00
2021-02-17 14:08:01 +01:00
2022-06-15 17:41:12 +02:00
2023-07-19 16:21:13 +02:00
2020-11-18 14:15:17 -06:00
2023-01-24 07:24:41 +01:00
2021-02-05 11:03:47 -08:00
2023-02-25 11:25:41 +01:00
2022-10-11 17:42:58 -06:00
2024-01-01 12:39:07 +00:00
2024-10-17 15:21:26 +02:00
2020-08-12 10:58:00 -07:00