]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: nVHE: gen-hyprel: Skip R_AARCH64_ABS32
authorPierre-Clément Tosi <ptosi@google.com>
Mon, 10 Jun 2024 06:32:33 +0000 (07:32 +0100)
committerOliver Upton <oliver.upton@linux.dev>
Thu, 20 Jun 2024 17:40:54 +0000 (17:40 +0000)
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>
arch/arm64/kvm/hyp/nvhe/gen-hyprel.c

index 6bc88a756cb7ad882f972d181a94e312b256faf3..b63f4e1c10330d250b624e14ff709e138618b3b2 100644 (file)
@@ -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: