[clang] [Clang][kcfi] Sign extend KCFI typeid rather than zero extend (PR #136734)
Sami Tolvanen via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 22 11:22:29 PDT 2025
samitolvanen wrote:
Unfortunately, the `__kcfi_typeid_` values are intentionally zero-extended, so they can be used in relocations with `movl`. With your patch applied:
```
...
LD .tmp_vmlinux1
ld.lld: error: vmlinux.o:(function __cfi___memcpy: .noinstr.text+0x4ac1): relocation R_X86_64_32 out of range: 18446744071952041092 is not in [0, 4294967295]; references '__kcfi_typeid___memcpy'
>>> referenced by usercopy_64.c
>>> defined in vmlinux.o
...
$ llvm-objdump -d -r arch/x86/lib/memcpy_64.o
...
0000000000000010 <__cfi___memcpy>:
10: b8 00 00 00 00 movl $0x0, %eax
0000000000000011: R_X86_64_32 __kcfi_typeid___memcpy
...
$ llvm-readelf --symbols vmlinux.o | grep __kcfi_typeid___memcpy
214399: ffffffff973e8484 0 NOTYPE WEAK DEFAULT ABS __kcfi_typeid___memcpy
```
See the `__CFI_TYPE` definition here:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/linkage.h#n100
In hindsight, adding a test to LLVM about this real-world `__kcfi_typeid_` use case would probably be a good idea.
https://github.com/llvm/llvm-project/pull/136734
More information about the cfe-commits
mailing list