Re: [PATCH v5 17/24] powerpc/vdso: Enable the vdsocheck tool
From: R Nageswara Sastry
Date: Tue Sep 08 2026 - 10:53:10 EST
On 08.09.2026 12:03 PM, Thomas Weißschuh wrote:
The vdsocheck tool validates the object files and final .so library.Tested-by: R Nageswara Sastry <rnsastry@xxxxxxxxxxxxx>
It can detect if the compiler created relocations which are incompatible
with the vDSO which need to be worked around.
Wire it up for the architecture.
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx>
System: ppc64le LPAR (IBM POWER), Linux 7.3-rc2
-----
arch/powerpc/Kconfig | 1 +
arch/powerpc/kernel/vdso/Makefile | 4 ++--
lib/vdso/check/vdsocheck.rs | 27 +++++++++++++++++++++++++++
3 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 2580e27e4328..f19e225cfc5c 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -330,6 +330,7 @@ config PPC
select SYSCTL_EXCEPTION_TRACE
select THREAD_INFO_IN_TASK
select TRACE_IRQFLAGS_SUPPORT
+ select VDSO_CHECK
select VDSO_DATASTORE
select VDSO_GETRANDOM
#
diff --git a/arch/powerpc/kernel/vdso/Makefile b/arch/powerpc/kernel/vdso/Makefile
index 368759f81708..ca20b91b4373 100644
--- a/arch/powerpc/kernel/vdso/Makefile
+++ b/arch/powerpc/kernel/vdso/Makefile
@@ -81,9 +81,9 @@ targets += vdso64.lds
CPPFLAGS_vdso64.lds += -P -C
# link rule for the .so file, .lds has to be first
-$(obj)/vdso32.so.dbg: $(obj)/vdso32.lds $(obj-vdso32) $(obj)/vgettimeofday-32.o $(obj)/vgetrandom-32.o $(obj)/crtsavres-32.o FORCE
+$(obj)/vdso32.so.dbg: $(obj)/vdso32.lds $(obj-vdso32) $(obj)/vgettimeofday-32.o $(obj)/vgetrandom-32.o $(obj)/crtsavres-32.o $(vdsocheck) FORCE
$(call if_changed,vdso32ld_and_check)
-$(obj)/vdso64.so.dbg: $(obj)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday-64.o $(obj)/vgetrandom-64.o FORCE
+$(obj)/vdso64.so.dbg: $(obj)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday-64.o $(obj)/vgetrandom-64.o $(vdsocheck) FORCE
$(call if_changed,vdso64ld_and_check)
# assembly rules for the .S files
diff --git a/lib/vdso/check/vdsocheck.rs b/lib/vdso/check/vdsocheck.rs
index e45a1fbc6829..429bdcd65818 100644
--- a/lib/vdso/check/vdsocheck.rs
+++ b/lib/vdso/check/vdsocheck.rs
@@ -69,6 +69,33 @@ fn allowed_relocations_for_machine(machine: u16) -> Option<AllowedRelocations<'s
..Default::default()
}
.into(),
+ bindings::EM_PPC => AllowedRelocations {
+ in_object_file: &[
+ bindings::R_PPC_REL24,
+ bindings::R_PPC_REL14,
+ bindings::R_PPC_REL32,
+ bindings::R_PPC_REL16,
+ bindings::R_PPC_REL16_LO,
+ bindings::R_PPC_REL16_HI,
+ bindings::R_PPC_REL16_HA,
+ ],
+ ..Default::default()
+ }
+ .into(),
+ bindings::EM_PPC64 => AllowedRelocations {
+ in_object_file: &[
+ bindings::R_PPC64_REL24,
+ bindings::R_PPC64_REL14,
+ bindings::R_PPC64_REL32,
+ bindings::R_PPC64_REL64,
+ bindings::R_PPC64_REL16,
+ bindings::R_PPC64_REL16_LO,
+ bindings::R_PPC64_REL16_HI,
+ bindings::R_PPC64_REL16_HA,
+ ],
+ ..Default::default()
+ }
+ .into(),
_ => None,
}
}
Thanks and Regards
R.Nageswara Sastry