[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