* [PATCH] powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic
@ 2018-04-10 1:22 Michael Ellerman
2018-04-11 14:49 ` Michael Ellerman
0 siblings, 1 reply; 5+ messages in thread
From: Michael Ellerman @ 2018-04-10 1:22 UTC (permalink / raw)
To: linuxppc-dev; +Cc: ard.biesheuvel
If you build the kernel with CONFIG_RELOCATABLE=n, then install the
modules, rebuild the kernel with CONFIG_RELOCATABLE=y and leave the
old modules installed, we crash something like:
Unable to handle kernel paging request for data at address 0xd000000018d66cef
Faulting instruction address: 0xc0000000021ddd08
Oops: Kernel access of bad area, sig: 11 [#1]
Modules linked in: x_tables autofs4
CPU: 2 PID: 1 Comm: systemd Not tainted 4.16.0-rc6-gcc_ubuntu_le-g99fec39 #1
...
NIP check_version.isra.22+0x118/0x170
Call Trace:
__ksymtab_xt_unregister_table+0x58/0xfffffffffffffcb8 [x_tables] (unreliable)
resolve_symbol+0xb4/0x150
load_module+0x10e8/0x29a0
SyS_finit_module+0x110/0x140
system_call+0x58/0x6c
This happens because since commit 71810db27c1c ("modversions: treat
symbol CRCs as 32 bit quantities"), a relocatable kernel encodes and
handles symbol CRCs differently from a non-relocatable kernel.
Although it's possible we could try and detect this situation and
handle it, it's much more robust to simply make the state of
CONFIG_RELOCATABLE part of the module vermagic.
Fixes: 71810db27c1c ("modversions: treat symbol CRCs as 32 bit quantities")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/include/asm/module.h | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h
index 7e28442827f1..4f6573934792 100644
--- a/arch/powerpc/include/asm/module.h
+++ b/arch/powerpc/include/asm/module.h
@@ -15,9 +15,19 @@
#ifdef CC_USING_MPROFILE_KERNEL
-#define MODULE_ARCH_VERMAGIC "mprofile-kernel"
+#define MODULE_ARCH_VERMAGIC_FTRACE "mprofile-kernel "
+#else
+#define MODULE_ARCH_VERMAGIC_FTRACE ""
#endif
+#ifdef CONFIG_RELOCATABLE
+#define MODULE_ARCH_VERMAGIC_RELOCATABLE "relocatable "
+#else
+#define MODULE_ARCH_VERMAGIC_RELOCATABLE ""
+#endif
+
+#define MODULE_ARCH_VERMAGIC MODULE_ARCH_VERMAGIC_FTRACE MODULE_ARCH_VERMAGIC_RELOCATABLE
+
#ifndef __powerpc64__
/*
* Thanks to Paul M for explaining this.
--
2.14.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic
2018-04-10 1:22 [PATCH] powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic Michael Ellerman
@ 2018-04-11 14:49 ` Michael Ellerman
2018-04-11 14:54 ` Ard Biesheuvel
0 siblings, 1 reply; 5+ messages in thread
From: Michael Ellerman @ 2018-04-11 14:49 UTC (permalink / raw)
To: Michael Ellerman, linuxppc-dev; +Cc: ard.biesheuvel
On Tue, 2018-04-10 at 01:22:06 UTC, Michael Ellerman wrote:
> If you build the kernel with CONFIG_RELOCATABLE=n, then install the
> modules, rebuild the kernel with CONFIG_RELOCATABLE=y and leave the
> old modules installed, we crash something like:
>
> Unable to handle kernel paging request for data at address 0xd000000018d66cef
> Faulting instruction address: 0xc0000000021ddd08
> Oops: Kernel access of bad area, sig: 11 [#1]
> Modules linked in: x_tables autofs4
> CPU: 2 PID: 1 Comm: systemd Not tainted 4.16.0-rc6-gcc_ubuntu_le-g99fec39 #1
> ...
> NIP check_version.isra.22+0x118/0x170
> Call Trace:
> __ksymtab_xt_unregister_table+0x58/0xfffffffffffffcb8 [x_tables] (unreliable)
> resolve_symbol+0xb4/0x150
> load_module+0x10e8/0x29a0
> SyS_finit_module+0x110/0x140
> system_call+0x58/0x6c
>
> This happens because since commit 71810db27c1c ("modversions: treat
> symbol CRCs as 32 bit quantities"), a relocatable kernel encodes and
> handles symbol CRCs differently from a non-relocatable kernel.
>
> Although it's possible we could try and detect this situation and
> handle it, it's much more robust to simply make the state of
> CONFIG_RELOCATABLE part of the module vermagic.
>
> Fixes: 71810db27c1c ("modversions: treat symbol CRCs as 32 bit quantities")
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Applied to powerpc fixes.
https://git.kernel.org/powerpc/c/73aca179d78eaa11604ba0783a6d8b
cheers
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic
2018-04-11 14:49 ` Michael Ellerman
@ 2018-04-11 14:54 ` Ard Biesheuvel
2018-04-16 14:10 ` Michael Ellerman
0 siblings, 1 reply; 5+ messages in thread
From: Ard Biesheuvel @ 2018-04-11 14:54 UTC (permalink / raw)
To: Michael Ellerman; +Cc: Michael Ellerman, linuxppc-dev
On 11 April 2018 at 16:49, Michael Ellerman
<patch-notifications@ellerman.id.au> wrote:
> On Tue, 2018-04-10 at 01:22:06 UTC, Michael Ellerman wrote:
>> If you build the kernel with CONFIG_RELOCATABLE=n, then install the
>> modules, rebuild the kernel with CONFIG_RELOCATABLE=y and leave the
>> old modules installed, we crash something like:
>>
>> Unable to handle kernel paging request for data at address 0xd000000018d66cef
>> Faulting instruction address: 0xc0000000021ddd08
>> Oops: Kernel access of bad area, sig: 11 [#1]
>> Modules linked in: x_tables autofs4
>> CPU: 2 PID: 1 Comm: systemd Not tainted 4.16.0-rc6-gcc_ubuntu_le-g99fec39 #1
>> ...
>> NIP check_version.isra.22+0x118/0x170
>> Call Trace:
>> __ksymtab_xt_unregister_table+0x58/0xfffffffffffffcb8 [x_tables] (unreliable)
>> resolve_symbol+0xb4/0x150
>> load_module+0x10e8/0x29a0
>> SyS_finit_module+0x110/0x140
>> system_call+0x58/0x6c
>>
>> This happens because since commit 71810db27c1c ("modversions: treat
>> symbol CRCs as 32 bit quantities"), a relocatable kernel encodes and
>> handles symbol CRCs differently from a non-relocatable kernel.
>>
>> Although it's possible we could try and detect this situation and
>> handle it, it's much more robust to simply make the state of
>> CONFIG_RELOCATABLE part of the module vermagic.
>>
>> Fixes: 71810db27c1c ("modversions: treat symbol CRCs as 32 bit quantities")
>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
>
> Applied to powerpc fixes.
>
> https://git.kernel.org/powerpc/c/73aca179d78eaa11604ba0783a6d8b
>
> cheers
Thanks for the cc. I guess this only affects powerpc, given that it is
the only arch that switches between CRC immediate values and CRC
offsets depending on the configuration.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic
2018-04-11 14:54 ` Ard Biesheuvel
@ 2018-04-16 14:10 ` Michael Ellerman
2018-04-17 14:42 ` Ard Biesheuvel
0 siblings, 1 reply; 5+ messages in thread
From: Michael Ellerman @ 2018-04-16 14:10 UTC (permalink / raw)
To: Ard Biesheuvel, Michael Ellerman; +Cc: linuxppc-dev
Ard Biesheuvel <ard.biesheuvel@linaro.org> writes:
> On 11 April 2018 at 16:49, Michael Ellerman
> <patch-notifications@ellerman.id.au> wrote:
>> On Tue, 2018-04-10 at 01:22:06 UTC, Michael Ellerman wrote:
>>> If you build the kernel with CONFIG_RELOCATABLE=n, then install the
>>> modules, rebuild the kernel with CONFIG_RELOCATABLE=y and leave the
>>> old modules installed, we crash something like:
>>>
>>> Unable to handle kernel paging request for data at address 0xd000000018d66cef
>>> Faulting instruction address: 0xc0000000021ddd08
>>> Oops: Kernel access of bad area, sig: 11 [#1]
>>> Modules linked in: x_tables autofs4
>>> CPU: 2 PID: 1 Comm: systemd Not tainted 4.16.0-rc6-gcc_ubuntu_le-g99fec39 #1
>>> ...
>>> NIP check_version.isra.22+0x118/0x170
>>> Call Trace:
>>> __ksymtab_xt_unregister_table+0x58/0xfffffffffffffcb8 [x_tables] (unreliable)
>>> resolve_symbol+0xb4/0x150
>>> load_module+0x10e8/0x29a0
>>> SyS_finit_module+0x110/0x140
>>> system_call+0x58/0x6c
>>>
>>> This happens because since commit 71810db27c1c ("modversions: treat
>>> symbol CRCs as 32 bit quantities"), a relocatable kernel encodes and
>>> handles symbol CRCs differently from a non-relocatable kernel.
>>>
>>> Although it's possible we could try and detect this situation and
>>> handle it, it's much more robust to simply make the state of
>>> CONFIG_RELOCATABLE part of the module vermagic.
>>>
>>> Fixes: 71810db27c1c ("modversions: treat symbol CRCs as 32 bit quantities")
>>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
>>
>> Applied to powerpc fixes.
>>
>> https://git.kernel.org/powerpc/c/73aca179d78eaa11604ba0783a6d8b
>
> Thanks for the cc. I guess this only affects powerpc, given that it is
> the only arch that switches between CRC immediate values and CRC
> offsets depending on the configuration.
No worries.
Is there any reason we shouldn't always turn on CONFIG_MODULE_REL_CRCS?
It seems to work, but I wanted to test it more before switching to that,
hence the quick fix above.
arch/um looks like it might be switching based on config, but I don't
know enough to say:
config LD_SCRIPT_STATIC
bool
default y
depends on STATIC_LINK
config LD_SCRIPT_DYN
bool
default y
depends on !LD_SCRIPT_STATIC
select MODULE_REL_CRCS if MODVERSIONS
cheers
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic
2018-04-16 14:10 ` Michael Ellerman
@ 2018-04-17 14:42 ` Ard Biesheuvel
0 siblings, 0 replies; 5+ messages in thread
From: Ard Biesheuvel @ 2018-04-17 14:42 UTC (permalink / raw)
To: Michael Ellerman; +Cc: Michael Ellerman, linuxppc-dev
On 16 April 2018 at 16:10, Michael Ellerman <mpe@ellerman.id.au> wrote:
> Ard Biesheuvel <ard.biesheuvel@linaro.org> writes:
>
>> On 11 April 2018 at 16:49, Michael Ellerman
>> <patch-notifications@ellerman.id.au> wrote:
>>> On Tue, 2018-04-10 at 01:22:06 UTC, Michael Ellerman wrote:
>>>> If you build the kernel with CONFIG_RELOCATABLE=n, then install the
>>>> modules, rebuild the kernel with CONFIG_RELOCATABLE=y and leave the
>>>> old modules installed, we crash something like:
>>>>
>>>> Unable to handle kernel paging request for data at address 0xd000000018d66cef
>>>> Faulting instruction address: 0xc0000000021ddd08
>>>> Oops: Kernel access of bad area, sig: 11 [#1]
>>>> Modules linked in: x_tables autofs4
>>>> CPU: 2 PID: 1 Comm: systemd Not tainted 4.16.0-rc6-gcc_ubuntu_le-g99fec39 #1
>>>> ...
>>>> NIP check_version.isra.22+0x118/0x170
>>>> Call Trace:
>>>> __ksymtab_xt_unregister_table+0x58/0xfffffffffffffcb8 [x_tables] (unreliable)
>>>> resolve_symbol+0xb4/0x150
>>>> load_module+0x10e8/0x29a0
>>>> SyS_finit_module+0x110/0x140
>>>> system_call+0x58/0x6c
>>>>
>>>> This happens because since commit 71810db27c1c ("modversions: treat
>>>> symbol CRCs as 32 bit quantities"), a relocatable kernel encodes and
>>>> handles symbol CRCs differently from a non-relocatable kernel.
>>>>
>>>> Although it's possible we could try and detect this situation and
>>>> handle it, it's much more robust to simply make the state of
>>>> CONFIG_RELOCATABLE part of the module vermagic.
>>>>
>>>> Fixes: 71810db27c1c ("modversions: treat symbol CRCs as 32 bit quantities")
>>>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
>>>
>>> Applied to powerpc fixes.
>>>
>>> https://git.kernel.org/powerpc/c/73aca179d78eaa11604ba0783a6d8b
>>
>> Thanks for the cc. I guess this only affects powerpc, given that it is
>> the only arch that switches between CRC immediate values and CRC
>> offsets depending on the configuration.
>
> No worries.
>
> Is there any reason we shouldn't always turn on CONFIG_MODULE_REL_CRCS?
> It seems to work, but I wanted to test it more before switching to that,
> hence the quick fix above.
>
>
> arch/um looks like it might be switching based on config, but I don't
> know enough to say:
>
> config LD_SCRIPT_STATIC
> bool
> default y
> depends on STATIC_LINK
>
> config LD_SCRIPT_DYN
> bool
> default y
> depends on !LD_SCRIPT_STATIC
> select MODULE_REL_CRCS if MODVERSIONS
>
The only reason not to enable it is that it ends up taking more space
on a 32-bit architecture with CONFIG_RELOCATABLE=n, given that you
need to record both the relative offset and the actual CRC value (both
32-bit quantities) rather than just the CRC itself. On a 64-bit arch
with CONFIG_RELOCATABLE=n, you end up replacing a single 64-bit
quantity with two 32-bit quantities, so it doesn't really matter.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-04-17 14:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-10 1:22 [PATCH] powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic Michael Ellerman
2018-04-11 14:49 ` Michael Ellerman
2018-04-11 14:54 ` Ard Biesheuvel
2018-04-16 14:10 ` Michael Ellerman
2018-04-17 14:42 ` Ard Biesheuvel
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).