2019-02-15 02:28:47

by chenzefeng

[permalink] [raw]
Subject: [PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

On x86-64, for 32-bit PC-relacive branches, we can generate PLT32 relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.

In linux 4.4 commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as R_X86_64_PC32") been fixed for the module loading, but not fixed for livepatch relocation, which will fail to load livepatch with the error message as follow:
relocation failed for symbol <symbol name> at <symbol address>

Signed-off-by: chenzefeng <[email protected]>
---
arch/x86/kernel/livepatch.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c index d1d35cc..579f8f8 100644
--- a/arch/x86/kernel/livepatch.c
+++ b/arch/x86/kernel/livepatch.c
@@ -58,6 +58,7 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
val = (s32)value;
break;
case R_X86_64_PC32:
+ case R_X86_64_PLT32:
val = (u32)(value - loc);
break;
default:
--
1.8.5.6



2019-02-15 15:27:11

by Jiri Kosina

[permalink] [raw]
Subject: Re: [PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

On Fri, 15 Feb 2019, chenzefeng (A) wrote:

> On x86-64, for 32-bit PC-relacive branches, we can generate PLT32
> relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be
> treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.
>
> In linux 4.4 commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as
> R_X86_64_PC32") been fixed for the module loading, but not fixed for
> livepatch relocation, which will fail to load livepatch with the error
> message as follow: relocation failed for symbol <symbol name> at <symbol
> address>
>
> Signed-off-by: chenzefeng <[email protected]>

What kernel version is this patch based on? We've got rid of x86-specific
module loading stub and offloaded all the relocation handling to generic
kmod loader long time ago.

--
Jiri Kosina
SUSE Labs


2019-02-15 15:36:30

by chenzefeng

[permalink] [raw]
Subject: 答复: [PATCH] x86: livepatch: Treat R_X86_64_ PLT32 as R_X86_64_PC32

HI, Jiri Kosina,

On Fri, 15 Feb 2019, Jiri Kosina wrote:
>On Fri, 15 Feb 2019, chenzefeng (A) wrote:

>> On x86-64, for 32-bit PC-relacive branches, we can generate PLT32
>> relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be
>> treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.
>>
>> In linux 4.4 commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as
>> R_X86_64_PC32") been fixed for the module loading, but not fixed for
>> livepatch relocation, which will fail to load livepatch with the error
>> message as follow: relocation failed for symbol <symbol name> at
>> <symbol
>> address>
>>
>> Signed-off-by: chenzefeng <[email protected]>

>What kernel version is this patch based on? We've got rid of x86-specific module loading stub and offloaded all the relocation handling to generic kmod loader long time ago.

The patch is based on kernel version Linux 4.4.174.

Thanks.
chenzefeng

2019-02-15 15:41:07

by Petr Mladek

[permalink] [raw]
Subject: Re: 答复: [PATCH ] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

On Fri 2019-02-15 08:17:36, chenzefeng (A) wrote:
> HI, Jiri Kosina,
>
> On Fri, 15 Feb 2019, Jiri Kosina wrote:
> >On Fri, 15 Feb 2019, chenzefeng (A) wrote:
>
> >> On x86-64, for 32-bit PC-relacive branches, we can generate PLT32
> >> relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be
> >> treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.
> >>
> >> In linux 4.4 commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as
> >> R_X86_64_PC32") been fixed for the module loading, but not fixed for
> >> livepatch relocation, which will fail to load livepatch with the error
> >> message as follow: relocation failed for symbol <symbol name> at
> >> <symbol
> >> address>
> >>
> >> Signed-off-by: chenzefeng <[email protected]>
>
> >What kernel version is this patch based on? We've got rid of x86-specific module loading stub and offloaded all the relocation handling to generic kmod loader long time ago.

The livepatch-specific code has been removed in v4.7, see
the commit 425595a7fc2096ab46c ("livepatch: reuse module
loader code to write relocations").

> The patch is based on kernel version Linux 4.4.174.

The patch would make sense only for 4.4 stable kernel
and it looks fine for this purpose.

Please, send the patch to [email protected] if
Greg misses it in this thread.

Best Regards,
Petr

2019-02-18 06:05:19

by Cheng Jian

[permalink] [raw]
Subject: Re: [PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

Hi??Jiri


This patch should be merged into 4.4 stable,

which still use klp_write_module_reloc.


https://elixir.bootlin.com/linux/v4.4.174/source/arch/x86/kernel/livepatch.c


ZeFeng may have sent a stable(4.4-y) patch to the wrong mail-list(mainline).


Thanks.

On 2019/2/15 15:28, Jiri Kosina wrote:
> On Fri, 15 Feb 2019, chenzefeng (A) wrote:
>
>> On x86-64, for 32-bit PC-relacive branches, we can generate PLT32
>> relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be
>> treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.
>>
>> In linux 4.4 commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as
>> R_X86_64_PC32") been fixed for the module loading, but not fixed for
>> livepatch relocation, which will fail to load livepatch with the error
>> message as follow: relocation failed for symbol <symbol name> at <symbol
>> address>
>>
>> Signed-off-by: chenzefeng <[email protected]>
> What kernel version is this patch based on? We've got rid of x86-specific
> module loading stub and offloaded all the relocation handling to generic
> kmod loader long time ago.
>



2019-02-18 09:49:32

by Petr Mladek

[permalink] [raw]
Subject: Re: [PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

On Mon 2019-02-18 13:29:11, chengjian (D) wrote:
> Hi,Jiri
>
>
> This patch should be merged into 4.4 stable,
>
> which still use klp_write_module_reloc.
>
>
> https://elixir.bootlin.com/linux/v4.4.174/source/arch/x86/kernel/livepatch.c
>
>
> ZeFeng may have sent a stable(4.4-y) patch to the wrong mail-list(mainline).

ZeFeng or Chengjian, please, send the patch once again with
[email protected] in CC and explanation that it is needed
only for 4.4 and why.

This thread is already too long and messed to be proceed
by stable people effectively.

Best Regards,
Petr

2019-02-18 11:48:53

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

On Fri, Feb 15, 2019 at 02:01:31AM +0000, chenzefeng (A) wrote:
> On x86-64, for 32-bit PC-relacive branches, we can generate PLT32 relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.
>
> In linux 4.4 commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as R_X86_64_PC32") been fixed for the module loading, but not fixed for livepatch relocation, which will fail to load livepatch with the error message as follow:
> relocation failed for symbol <symbol name> at <symbol address>
>
> Signed-off-by: chenzefeng <[email protected]>
> ---
> arch/x86/kernel/livepatch.c | 1 +
> 1 file changed, 1 insertion(+)

<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree. Please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.

</formletter>

2019-02-19 06:39:25

by chenzefeng

[permalink] [raw]
Subject: Re:[PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

On Mon 2019-02-18 17:22, Petr wrote:

> On Mon 2019-02-18 13:29:11, chengjian (D) wrote:
> > Hi,Jiri
> >
> >
> > This patch should be merged into 4.4 stable,
> >
> > which still use klp_write_module_reloc.
> >
> >
> > https://elixir.bootlin.com/linux/v4.4.174/source/arch/x86/kernel/livep
> > atch.c
> >
> >
> > ZeFeng may have sent a stable(4.4-y) patch to the wrong mail-list(mainline).
>
> ZeFeng or Chengjian, please, send the patch once again with [email protected] in CC and explanation that it is needed only for 4.4 and why.
>
> This thread is already too long and messed to be proceed by stable people effectively.
>
> Best Regards,
> Petr

On x86-64, for 32-bit PC-relacive branches, we can generate PLT32 relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.

commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as R_X86_64_PC32") been fixed for the module loading, but not fixed for livepatch relocation, which will fail to load livepatch with the error message as follow:
relocation failed for symbol <symbol name> at <symbol address>

This issue only effacted the kernel version from 4.0 to 4.6, becauce the function klp_write_module_reloc is introduced by:
commit b700e7f03df5 ("livepatch: kernel: add support for live patching") and deleted by: commit 425595a7fc20
("livepatch: reuse module loader code to write relocations")

Signed-off-by: chenzefeng <[email protected]>
---
arch/x86/kernel/livepatch.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c index d1d35cc..579f8f8 100644
--- a/arch/x86/kernel/livepatch.c
+++ b/arch/x86/kernel/livepatch.c
@@ -58,6 +58,7 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
val = (s32)value;
break;
case R_X86_64_PC32:
+ case R_X86_64_PLT32:
val = (u32)(value - loc);
break;
default:
--
1.8.5.6


2019-02-19 08:18:50

by chenzefeng

[permalink] [raw]
Subject: Re: [PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

Hi,

I am sorry this email was sent by accident. Please ignore this email.

Best Regards



-----邮件原件-----
发件人: chenzefeng (A)
发送时间: 2019年2月19日 14:38
收件人: 'Petr Mladek' <[email protected]>; chengjian (D) <[email protected]>
抄送: '[email protected]' <[email protected]>; Jiri Kosina <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Xiexiuqi <[email protected]>
主题: Re:[PATCH] x86: livepatch: Treat R_X86_64_PLT32 as R_X86_64_PC32

On Mon 2019-02-18 17:22, Petr wrote:

> On Mon 2019-02-18 13:29:11, chengjian (D) wrote:
> > Hi,Jiri
> >
> >
> > This patch should be merged into 4.4 stable,
> >
> > which still use klp_write_module_reloc.
> >
> >
> > https://elixir.bootlin.com/linux/v4.4.174/source/arch/x86/kernel/livep
> > atch.c
> >
> >
> > ZeFeng may have sent a stable(4.4-y) patch to the wrong mail-list(mainline).
>
> ZeFeng or Chengjian, please, send the patch once again with [email protected] in CC and explanation that it is needed only for 4.4 and why.
>
> This thread is already too long and messed to be proceed by stable people effectively.
>
> Best Regards,
> Petr

On x86-64, for 32-bit PC-relacive branches, we can generate PLT32 relocation, instead of PC32 relocation. and R_X86_64_PLT32 can be treated the same as R_X86_64_PC32 since linux kernel doesn't use PLT.

commit b21ebf2fb4cd ("x86: Treat R_X86_64_PLT32 as R_X86_64_PC32") been fixed for the module loading, but not fixed for livepatch relocation, which will fail to load livepatch with the error message as follow:
relocation failed for symbol <symbol name> at <symbol address>

This issue only effacted the kernel version from 4.0 to 4.6, becauce the function klp_write_module_reloc is introduced by:
commit b700e7f03df5 ("livepatch: kernel: add support for live patching") and deleted by: commit 425595a7fc20
("livepatch: reuse module loader code to write relocations")

Signed-off-by: chenzefeng <[email protected]>
---
arch/x86/kernel/livepatch.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c index d1d35cc..579f8f8 100644
--- a/arch/x86/kernel/livepatch.c
+++ b/arch/x86/kernel/livepatch.c
@@ -58,6 +58,7 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
val = (s32)value;
break;
case R_X86_64_PC32:
+ case R_X86_64_PLT32:
val = (u32)(value - loc);
break;
default:
--
1.8.5.6