linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fix 3.16 unknown rela relocation 4 error
@ 2020-01-26  3:16 Woody Suwalski
  2020-01-26 17:13 ` Ben Hutchings
  0 siblings, 1 reply; 2+ messages in thread
From: Woody Suwalski @ 2020-01-26  3:16 UTC (permalink / raw)
  To: LKML; +Cc: ben

[-- Attachment #1: Type: text/plain, Size: 1571 bytes --]

Trying to use an AMD64 3.16 kernel built on a new Debian system fails 
because
most of the kernel modules can not be loaded.

This patch handles the PLT32 relocation errors for kernels modules built 
with binutils
newer then 2.31, similar to:
[    5.742485] module: autofs4: Unknown rela relocation: 4
[    5.742536] systemd[1]: Failed to insert module 'autofs4': Exec 
format error

This patch is based on a mainline kernel patch 
b21ebf2fb4cde1618915a97cc773e287ff49173e
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Wed, 7 Feb 2018 14:20:09 -0800
Subject: x86: Treat R_X86_64_PLT32 as R_X86_64_PC32

Signed-off-by: Woody Suwalski <terraluna977@gmail.com>

--- a/arch/x86/tools/relocs.c    2020-01-24 18:48:09.477919152 -0500
+++ b/arch/x86/tools/relocs.c    2020-01-24 18:48:53.645612045 -0500
@@ -763,6 +763,7 @@ static int do_reloc64(struct section *se
      switch (r_type) {
      case R_X86_64_NONE:
      case R_X86_64_PC32:
+    case R_X86_64_PLT32:
          /*
           * NONE can be ignored and PC relative relocations don't
           * need to be adjusted.
--- a/arch/x86/kernel/module.c    2020-01-24 18:46:54.922670590 -0500
+++ b/arch/x86/kernel/module.c    2020-01-24 18:47:46.714112016 -0500
@@ -180,6 +180,7 @@ int apply_relocate_add(Elf64_Shdr *sechd
                  goto overflow;
              break;
          case R_X86_64_PC32:
+        case R_X86_64_PLT32:
              val -= (u64)loc;
              *(u32 *)loc = val;
  #if 0


[-- Attachment #2: reloc_PLT32_3.16.diff --]
[-- Type: text/x-patch, Size: 1215 bytes --]

Handle the PLT32 reloacation errors for kernels binaries built with binutils
newer then 2.31, similar to:
[    5.742485] module: autofs4: Unknown rela relocation: 4
[    5.742536] systemd[1]: Failed to insert module 'autofs4': Exec format error

This patch is based on a mainline kernel patch b21ebf2fb4cde1618915a97cc773e287ff49173e
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Wed, 7 Feb 2018 14:20:09 -0800
Subject: x86: Treat R_X86_64_PLT32 as R_X86_64_PC32

Signed-off-by: Woody Suwalski <terraluna977@gmail.com>

--- a/arch/x86/tools/relocs.c	2020-01-24 18:48:09.477919152 -0500
+++ b/arch/x86/tools/relocs.c	2020-01-24 18:48:53.645612045 -0500
@@ -763,6 +763,7 @@ static int do_reloc64(struct section *se
 	switch (r_type) {
 	case R_X86_64_NONE:
 	case R_X86_64_PC32:
+	case R_X86_64_PLT32:
 		/*
 		 * NONE can be ignored and PC relative relocations don't
 		 * need to be adjusted.
--- a/arch/x86/kernel/module.c	2020-01-24 18:46:54.922670590 -0500
+++ b/arch/x86/kernel/module.c	2020-01-24 18:47:46.714112016 -0500
@@ -180,6 +180,7 @@ int apply_relocate_add(Elf64_Shdr *sechd
 				goto overflow;
 			break;
 		case R_X86_64_PC32:
+		case R_X86_64_PLT32:
 			val -= (u64)loc;
 			*(u32 *)loc = val;
 #if 0

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] fix 3.16 unknown rela relocation 4 error
  2020-01-26  3:16 [PATCH] fix 3.16 unknown rela relocation 4 error Woody Suwalski
@ 2020-01-26 17:13 ` Ben Hutchings
  0 siblings, 0 replies; 2+ messages in thread
From: Ben Hutchings @ 2020-01-26 17:13 UTC (permalink / raw)
  To: Woody Suwalski, LKML; +Cc: stable

[-- Attachment #1: Type: text/plain, Size: 1909 bytes --]

On Sat, 2020-01-25 at 22:16 -0500, Woody Suwalski wrote:
> Trying to use an AMD64 3.16 kernel built on a new Debian system fails 
> because
> most of the kernel modules can not be loaded.

I don't recommend using the latest toolchain for 3.16 (certainly gcc 9
won't work).  But I will apply this since it's such a simple fix. 
Thanks for the backport.

Ben.

> This patch handles the PLT32 relocation errors for kernels modules built 
> with binutils
> newer then 2.31, similar to:
> [    5.742485] module: autofs4: Unknown rela relocation: 4
> [    5.742536] systemd[1]: Failed to insert module 'autofs4': Exec 
> format error
> 
> This patch is based on a mainline kernel patch 
> b21ebf2fb4cde1618915a97cc773e287ff49173e
> From: "H.J. Lu" <hjl.tools@gmail.com>
> Date: Wed, 7 Feb 2018 14:20:09 -0800
> Subject: x86: Treat R_X86_64_PLT32 as R_X86_64_PC32
> 
> Signed-off-by: Woody Suwalski <terraluna977@gmail.com>
> 
> --- a/arch/x86/tools/relocs.c    2020-01-24 18:48:09.477919152 -0500
> +++ b/arch/x86/tools/relocs.c    2020-01-24 18:48:53.645612045 -0500
> @@ -763,6 +763,7 @@ static int do_reloc64(struct section *se
>       switch (r_type) {
>       case R_X86_64_NONE:
>       case R_X86_64_PC32:
> +    case R_X86_64_PLT32:
>           /*
>            * NONE can be ignored and PC relative relocations don't
>            * need to be adjusted.
> --- a/arch/x86/kernel/module.c    2020-01-24 18:46:54.922670590 -0500
> +++ b/arch/x86/kernel/module.c    2020-01-24 18:47:46.714112016 -0500
> @@ -180,6 +180,7 @@ int apply_relocate_add(Elf64_Shdr *sechd
>                   goto overflow;
>               break;
>           case R_X86_64_PC32:
> +        case R_X86_64_PLT32:
>               val -= (u64)loc;
>               *(u32 *)loc = val;
>   #if 0
> 
-- 
Ben Hutchings
The program is absolutely right; therefore, the computer must be wrong.



[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-01-26 17:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-26  3:16 [PATCH] fix 3.16 unknown rela relocation 4 error Woody Suwalski
2020-01-26 17:13 ` Ben Hutchings

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).