[PATCH v5 00/24] vdso: Reject absolute relocations during build

Thomas Weißschuh thomas.weissschuh at linutronix.de
Mon Sep 7 23:33:34 PDT 2026


The compiler can emit absolute relocations in vDSO code,
which are invalid in vDSO code.
Detect them at compile-time.

libc elf.h is missing some of the relocation constants,
so make use of the kernels own UAPI headers instead.

Patches 13 onward contain the architecture specific changes,
interesting for the architecture maintaines.

Kbuild and Rust folks: This contains custom definitions of hostprog
bindgen and rust library commands.
These are currently only defined inside the subsystem directory.
Let me know if they should go into scripts/Makefile.host.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh at linutronix.de>
---
Changes in v5:
- Rebase on v7.3-rc1
- s/HOSTRUSTLIB/HOSTRUSTC L/
- Pick up review tags.
- Also handle SPARC.
- Build 'vdsocheck' during the prepare phase.
- Drop now unnecessary riscv LTO preparation patches.
- Link to v4: https://lore.kernel.org/r/20250812-vdso-absolute-reloc-v4-0-61a8b615e5ec@linutronix.de

Changes in v4:
- Replace the inline shell logic with a dedicated build-time tool
- Link to v3: https://lore.kernel.org/r/20250611-vdso-absolute-reloc-v3-0-47897d73784b@linutronix.de

Changes in v3:
- Drop already applied bugfix for arm64
- Disable LTO for the riscv vDSO, as it is incompatible
- Link to v2: https://lore.kernel.org/r/20250430-vdso-absolute-reloc-v2-0-5efcc3bc4b26@linutronix.de

Changes in v2:
- Link to openend (invalid) GCC bug containing more explanations
- Refine commit messages
- Don't fail on commit absolute relocations in debug info
- Link to v1: https://lore.kernel.org/r/20250429-vdso-absolute-reloc-v1-0-987a0afd10b5@linutronix.de

---
Thomas Weißschuh (24):
      elf, uapi: Add a header for relocation constants
      x86/elf, um/x86/elf: Move relocation constants to UAPI
      ARM: elf: Move relocation constants to UAPI
      arm64: elf: Move relocation constants to UAPI
      powerpc/elf: Move relocation constants to UAPI
      riscv: elf: Move relocation constants to UAPI
      LoongArch: Move relocation constants to UAPI
      s390/elf: Move relocation constants to UAPI
      MIPS: ELF: Move relocation constants to UAPI
      sparc: elf: Move relocation constants to UAPI
      tools headers UAPI: Sync ELF headers with the kernel sources
      vdso: Add the vdsocheck tool
      x86/vdso: Enable the vdsocheck tool
      ARM: vdso: Enable the vdsocheck tool
      arm64: vdso: Enable the vdsocheck tool
      powerpc/elf: Add 32-bit REL16 relocation definitions
      powerpc/vdso: Enable the vdsocheck tool
      riscv: vdso: Enable the vdsocheck tool
      LoongArch: vDSO: Enable the vdsocheck tool
      s390/vdso: Enable the vdsocheck tool
      MIPS: ELF: Add more PC-relative relocation definitions
      MIPS: vdso: Enable the vdsocheck tool
      sparc: vdso: Enable the vdsocheck tool
      vDSO: Automatically enable VDSO_CHECK

 Makefile                                    |  19 +
 arch/arm/include/asm/elf.h                  |  24 -
 arch/arm/vdso/Makefile                      |   4 +-
 arch/arm64/include/asm/elf.h                |  55 ---
 arch/arm64/kernel/vdso/Makefile             |   4 +-
 arch/loongarch/include/asm/elf.h            | 130 -----
 arch/loongarch/vdso/Makefile                |   4 +-
 arch/mips/include/asm/elf.h                 |  55 ---
 arch/mips/vdso/Makefile                     |   8 +-
 arch/powerpc/include/uapi/asm/elf.h         | 201 --------
 arch/powerpc/kernel/vdso/Makefile           |   4 +-
 arch/riscv/include/uapi/asm/elf.h           |  66 ---
 arch/riscv/kernel/vdso/Makefile             |   4 +-
 arch/s390/include/asm/elf.h                 |  83 ----
 arch/s390/kernel/vdso/Makefile              |   4 +-
 arch/sparc/include/asm/elf_32.h             |  43 --
 arch/sparc/include/asm/elf_64.h             |  44 --
 arch/sparc/vdso/Makefile                    |   5 +-
 arch/x86/entry/vdso/common/Makefile.include |   2 +-
 arch/x86/include/asm/elf.h                  |  33 --
 arch/x86/um/asm/elf.h                       |  33 --
 include/uapi/linux/elf-r.h                  | 705 ++++++++++++++++++++++++++++
 include/uapi/linux/elf.h                    |   1 +
 lib/vdso/Kconfig                            |   7 +
 lib/vdso/Makefile                           |   2 +
 lib/vdso/Makefile.include                   |  14 +
 lib/vdso/check/.gitignore                   |   3 +
 lib/vdso/check/Makefile                     |  34 ++
 lib/vdso/check/elf.rs                       | 498 ++++++++++++++++++++
 lib/vdso/check/vdsocheck.rs                 | 299 ++++++++++++
 tools/include/uapi/linux/elf-em.h           |  71 +++
 tools/include/uapi/linux/elf-r.h            | 705 ++++++++++++++++++++++++++++
 tools/include/uapi/linux/elf.h              | 112 ++++-
 33 files changed, 2479 insertions(+), 797 deletions(-)
---
base-commit: 2f737a133fad3808f9993f704fb27fd7791a0a41
change-id: 20250428-vdso-absolute-reloc-a226293c1761

Best regards,
--  
Thomas Weißschuh <thomas.weissschuh at linutronix.de>




More information about the linux-riscv mailing list