[ARM64][GCC10] Kernel can't load any module due to RWX check

5 messages, 3 authors, 2020-09-01 · open the first message on its own page

[ARM64][GCC10] Kernel can't load any module due to RWX check

From: Qu Wenruo <hidden>
Date: 2020-08-29 07:51:50

Hi,

Recently built a v5.9-rc2 kernel, it boots fine, but unable to load any
kernel module.

After some debugging, it shows that it's due to RWX check failure:

  load_module: start
  module_enforce_rwx_sections: index=22 sh_flags=0x7 shf_wx=0x5
  layout_and_allocate: module enforce rwx sections
  load_module: failed to alloc layout and allocate
  load_module: end

Futhermore, it's unable to disable the RWX check through "make
menuconfig", since the ARCH_OPTIONAL_KERNEL_RWX is no for arm64.

The offending section 22 looks like this: (the kernel reports 38
sectors, while we only have 37, thus near-by sections are also shown here).

 20 .data         00000aa0  0000000000000000  0000000000000000  00086d08
 2**3
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 21 __bug_table   000000cc  0000000000000000  0000000000000000  000877a8
 2**2
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 22 __dyndbg      0000b9b8  0000000000000000  0000000000000000  00087878
 2**3
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 23 .data.unlikely 00000012  0000000000000000  0000000000000000
00093230  2**0
                  CONTENTS, ALLOC, LOAD, DATA

I'm using GCC 10.2.0, could this be the cause?

Thanks,
Qu


Re: [ARM64][GCC10] Kernel can't load any module due to RWX check

From: Qu Wenruo <hidden>
Date: 2020-08-29 07:58:50


On 2020/8/29 下午3:49, Qu Wenruo wrote:

On 2020/8/29 下午3:44, Qu Wenruo wrote:
quoted
Hi,

Recently built a v5.9-rc2 kernel, it boots fine, but unable to load any
kernel module.

After some debugging, it shows that it's due to RWX check failure:

  load_module: start
  module_enforce_rwx_sections: index=22 sh_flags=0x7 shf_wx=0x5
  layout_and_allocate: module enforce rwx sections
  load_module: failed to alloc layout and allocate
  load_module: end

Futhermore, it's unable to disable the RWX check through "make
menuconfig", since the ARCH_OPTIONAL_KERNEL_RWX is no for arm64.

The offending section 22 looks like this: (the kernel reports 38
sectors, while we only have 37, thus near-by sections are also shown here).

 20 .data         00000aa0  0000000000000000  0000000000000000  00086d08
 2**3
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 21 __bug_table   000000cc  0000000000000000  0000000000000000  000877a8
 2**2
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 22 __dyndbg      0000b9b8  0000000000000000  0000000000000000  00087878
 2**3
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 23 .data.unlikely 00000012  0000000000000000  0000000000000000
00093230  2**0
                  CONTENTS, ALLOC, LOAD, DATA

I'm using GCC 10.2.0, could this be the cause?
I should check the git log, the module_enforce_rwx_sections() is just
recently added by commit 5c3a7db0c7ec ("module: Harden STRICT_MODULE_RWX").

Hi Peter, any idea how could this commit causing a regression on arm64
but not on x86_64?
And obviously, reverting it solves the problem of mine.
(Now happy working 4K sector size btrfs support on 64K page size system)

Thanks,
Qu
Thanks,
Qu
quoted
Thanks,
Qu


Re: [ARM64][GCC10] Kernel can't load any module due to RWX check

From: Qu Wenruo <hidden>
Date: 2020-08-29 08:17:17


On 2020/8/29 下午3:44, Qu Wenruo wrote:
Hi,

Recently built a v5.9-rc2 kernel, it boots fine, but unable to load any
kernel module.

After some debugging, it shows that it's due to RWX check failure:

  load_module: start
  module_enforce_rwx_sections: index=22 sh_flags=0x7 shf_wx=0x5
  layout_and_allocate: module enforce rwx sections
  load_module: failed to alloc layout and allocate
  load_module: end

Futhermore, it's unable to disable the RWX check through "make
menuconfig", since the ARCH_OPTIONAL_KERNEL_RWX is no for arm64.

The offending section 22 looks like this: (the kernel reports 38
sectors, while we only have 37, thus near-by sections are also shown here).

 20 .data         00000aa0  0000000000000000  0000000000000000  00086d08
 2**3
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 21 __bug_table   000000cc  0000000000000000  0000000000000000  000877a8
 2**2
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 22 __dyndbg      0000b9b8  0000000000000000  0000000000000000  00087878
 2**3
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
 23 .data.unlikely 00000012  0000000000000000  0000000000000000
00093230  2**0
                  CONTENTS, ALLOC, LOAD, DATA

I'm using GCC 10.2.0, could this be the cause?
I should check the git log, the module_enforce_rwx_sections() is just
recently added by commit 5c3a7db0c7ec ("module: Harden STRICT_MODULE_RWX").

Hi Peter, any idea how could this commit causing a regression on arm64
but not on x86_64?

Thanks,
Qu
Thanks,
Qu


Re: [ARM64][GCC10] Kernel can't load any module due to RWX check

From: peterz@infradead.org
Date: 2020-08-29 10:04:56

On Sat, Aug 29, 2020 at 03:49:36PM +0800, Qu Wenruo wrote:
Hi Peter, any idea how could this commit causing a regression on arm64
but not on x86_64?
It's a bug^Wfeature in binutils-2.35.

See this thread: https://lkml.kernel.org/r/20200808101222.5103093e@coco.lan

People are working on a fix, see the tail of that thread.

Re: [ARM64][GCC10] Kernel can't load any module due to RWX check

From: Will Deacon <will@kernel.org>
Date: 2020-09-01 12:54:42

On Sat, Aug 29, 2020 at 03:44:37PM +0800, Qu Wenruo wrote:
Recently built a v5.9-rc2 kernel, it boots fine, but unable to load any
kernel module.

After some debugging, it shows that it's due to RWX check failure:

  load_module: start
  module_enforce_rwx_sections: index=22 sh_flags=0x7 shf_wx=0x5
  layout_and_allocate: module enforce rwx sections
  load_module: failed to alloc layout and allocate
  load_module: end
May well be related to:

https://lore.kernel.org/r/20200831094651.GA16385@linux-8ccs

Will
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help