diff options
author | Pierre-Clément Tosi <ptosi@google.com> | 2024-06-10 07:32:33 +0100 |
---|---|---|
committer | Oliver Upton <oliver.upton@linux.dev> | 2024-06-20 17:40:54 +0000 |
commit | 4ab3f9dd561b428460038a9bb041e92db6197f18 (patch) | |
tree | e7c5a7649d62764cb285306f54b8b991a9a83fb1 /arch/arm64/kvm | |
parent | 6e3b773ed6bc5e783fa314b75071f022324f94a8 (diff) | |
download | linux-4ab3f9dd561b428460038a9bb041e92db6197f18.tar.gz linux-4ab3f9dd561b428460038a9bb041e92db6197f18.tar.bz2 linux-4ab3f9dd561b428460038a9bb041e92db6197f18.zip |
KVM: arm64: nVHE: gen-hyprel: Skip R_AARCH64_ABS32
Ignore R_AARCH64_ABS32 relocations, instead of panicking, when emitting
the relocation table of the hypervisor. The toolchain might produce them
when generating function calls with kCFI to represent the 32-bit type ID
which can then be resolved across compilation units at link time. These
are NOT actual 32-bit addresses and are therefore not needed in the
final (runtime) relocation table (which is unlikely to use 32-bit
absolute addresses for arm64 anyway).
Signed-off-by: Pierre-Clément Tosi <ptosi@google.com>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20240610063244.2828978-5-ptosi@google.com
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Diffstat (limited to 'arch/arm64/kvm')
-rw-r--r-- | arch/arm64/kvm/hyp/nvhe/gen-hyprel.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c index 6bc88a756cb7..b63f4e1c1033 100644 --- a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c +++ b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c @@ -50,6 +50,9 @@ #ifndef R_AARCH64_ABS64 #define R_AARCH64_ABS64 257 #endif +#ifndef R_AARCH64_ABS32 +#define R_AARCH64_ABS32 258 +#endif #ifndef R_AARCH64_PREL64 #define R_AARCH64_PREL64 260 #endif @@ -383,6 +386,9 @@ static void emit_rela_section(Elf64_Shdr *sh_rela) case R_AARCH64_ABS64: emit_rela_abs64(rela, sh_orig_name); break; + /* Allow 32-bit absolute relocation, for kCFI type hashes. */ + case R_AARCH64_ABS32: + break; /* Allow position-relative data relocations. */ case R_AARCH64_PREL64: case R_AARCH64_PREL32: |