Kees Cook 2e53b877dc lkdtm: Add CFI_BACKWARD to test ROP mitigations
In order to test various backward-edge control flow integrity methods,
add a test that manipulates the return address on the stack. Currently
only arm64 Pointer Authentication and Shadow Call Stack is supported.

 $ echo CFI_BACKWARD | cat >/sys/kernel/debug/provoke-crash/DIRECT

Under SCS, successful test of the mitigation is reported as:

 lkdtm: Performing direct entry CFI_BACKWARD
 lkdtm: Attempting unchecked stack return address redirection ...
 lkdtm: ok: redirected stack return address.
 lkdtm: Attempting checked stack return address redirection ...
 lkdtm: ok: control flow unchanged.

Under PAC, successful test of the mitigation is reported by the PAC
exception handler:

 lkdtm: Performing direct entry CFI_BACKWARD
 lkdtm: Attempting unchecked stack return address redirection ...
 lkdtm: ok: redirected stack return address.
 lkdtm: Attempting checked stack return address redirection ...
 Unable to handle kernel paging request at virtual address bfffffc0088d0514
 Mem abort info:
   ESR = 0x86000004
   EC = 0x21: IABT (current EL), IL = 32 bits
   SET = 0, FnV = 0
   EA = 0, S1PTW = 0
   FSC = 0x04: level 0 translation fault
 [bfffffc0088d0514] address between user and kernel address ranges
 ...

If the CONFIGs are missing (or the mitigation isn't working), failure
is reported as:

 lkdtm: Performing direct entry CFI_BACKWARD
 lkdtm: Attempting unchecked stack return address redirection ...
 lkdtm: ok: redirected stack return address.
 lkdtm: Attempting checked stack return address redirection ...
 lkdtm: FAIL: stack return address was redirected!
 lkdtm: This is probably expected, since this kernel was built *without* CONFIG_ARM64_PTR_AUTH_KERNEL=y nor CONFIG_SHADOW_CALL_STACK=y

Co-developed-by: Dan Li <ashimida@linux.alibaba.com>
Signed-off-by: Dan Li <ashimida@linux.alibaba.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/lkml/20220416001103.1524653-1-keescook@chromium.org
2022-04-16 13:57:23 -07:00
..
2022-04-08 19:50:44 +02:00
2022-03-25 13:35:34 -07:00
2022-04-06 13:07:53 -06:00
2022-04-06 08:47:52 -06:00
2022-03-23 18:03:08 -07:00
2022-03-30 16:17:54 -07:00
2022-03-31 13:57:15 -07:00
2022-04-08 12:59:43 -07:00
2022-03-24 18:12:09 -07:00
2022-03-30 10:54:49 -07:00
2022-04-08 09:22:16 +10:00
2022-04-07 06:35:34 -10:00
2022-03-24 16:19:43 -07:00
2022-03-23 18:23:13 -07:00
2022-03-25 13:56:18 -07:00
2022-04-08 06:37:11 -10:00
2022-03-21 18:33:57 -07:00
2022-03-30 10:04:11 -07:00
2022-04-01 16:26:57 -07:00
2022-04-07 06:35:34 -10:00
2022-04-02 10:44:18 -07:00
2022-03-21 14:46:01 -07:00
2022-03-28 12:41:28 -07:00
2022-03-30 10:50:48 -07:00
2022-04-01 09:37:18 -07:00
2022-03-27 22:18:39 +02:00
2022-03-24 13:13:26 -07:00
2022-04-08 18:23:02 -10:00
2022-03-23 18:23:13 -07:00
2022-03-18 19:00:26 +01:00
2022-03-28 14:32:39 -07:00
2022-04-05 10:40:52 -07:00
2022-03-31 13:57:15 -07:00
2022-04-05 10:40:52 -07:00
2022-03-31 14:14:03 -07:00