summaryrefslogtreecommitdiff
path: root/scripts/objdiff
diff options
context:
space:
mode:
authorHeiko Carstens <hca@linux.ibm.com>2026-07-27 16:05:13 +0200
committerVasily Gorbik <gor@linux.ibm.com>2026-08-05 15:16:54 +0200
commite54228ad8ffb847c99449999424294a9b724692e (patch)
tree11293fb13cd9cbd6d61ba10541a7af5e7c705c5d /scripts/objdiff
parent227b4e108adcc4ea40ba218f5de6b2f3a9890665 (diff)
downloadlinux-e54228ad8ffb847c99449999424294a9b724692e.tar.gz
linux-e54228ad8ffb847c99449999424294a9b724692e.zip
s390/Kconfig: Select ARCH_SUPPORTS_CFI
With all prerequisites in place select ARCH_SUPPORTS_CFI. Note that this support is supposed to work with the generic kCFI support which is provided by clang. This comes with a couple of limitations: The generic kCFI implementation does not generate a .kcfi_traps section, nor is a special instruction used in case a checksum mismatch is detected. This means in case of checksum mismatch the kernel just crashes. It should be quite easy to tell by the surrounding code that a crash happened because of a checksum mismatch. If clang and/or gcc provide a .kcfi_traps section it will be possible to print proper CFI messages instead of just crashing the kernel (enable ARCH_USES_CFI_TRAPS). In addition this also means that CFI_PERMISSIVE does not work. Even if the option is selected the kernel will crash in case of checksum mismatch. However it seems to be acceptable to enable kCFI support to the kernel now even if it is not perfect. Later clang and gcc extensions are required to improve this. As of now a crash caused by a CFI failure looks like this: illegal operation: 0001 ilc:1 [#1]SMP Modules linked in: bpf_testmod(OE) CPU: 0 UID: 0 PID: 92 Comm: test_progs Tainted: G OE 7.2.0-rc4-00021-gc35ed7a1ca22-dirty #3 PREEMPTLAZY Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE Hardware name: IBM 3931 A01 703 (KVM/Linux) Krnl PSW : 0704e00180000000 00000166d4853a0a (bpf_task_work_callback+0x176/0x290) R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:0 RI:0 EA:3 Krnl GPRS: 0400000069b02e96 000001665471856c 0000000084dc1000 000000008084da58 000000008084da60 000000005ff492bf 0000000000000000 00000000809de300 fffffffffff7ffff 00000000000a0337 00000000809e4d00 000000008437b100 00000000801bc288 00000000801bc280 00000166d48538fc 000000e6d502ba90 Krnl Code: 00000166d48539fa: e320c0400004 lg %r2,64(%r12) 00000166d4853a00: e340c0480004 lg %r4,72(%r12) *00000166d4853a06: a7640001 brc 6,00000166d4853a08 >00000166d4853a0a: 0de1 basr %r14,%r1 00000166d4853a0c: e300b6580095 llh %r0,1624(%r11) 00000166d4853a12: ec040009027e cij %r0,2,4,00000166d4853a24 00000166d4853a18: a70affff ahi %r0,-1 00000166d4853a1c: 4000b658 sth %r0,1624(%r11) Call Trace: [<00000166d4853a0a>] bpf_task_work_callback+0x176/0x290 ... The disassembly contains the brc instruction (branch into the instruction itself with two byte offset to execute an illegal instruction, and the following basr instruction used for an indirect branch. Reviewed-by: Jens Remus <jremus@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Tested-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Diffstat (limited to 'scripts/objdiff')
0 files changed, 0 insertions, 0 deletions