[linux-yocto] [PATCH] modules: always page-align module section allocations

zhe.he at windriver.com zhe.he at windriver.com
Fri Aug 16 09:01:05 PDT 2019



在 2019年8月16日 23:29,Paul Gortmaker <paul.gortmaker at windriver.com> 写下: 

>

> [[linux-yocto] [PATCH] modules: always page-align module section allocations] On 16/08/2019 (Fri 15:36) zhe.he at windriver.com wrote: 

>

> It helps maintainers if the version is embedded in the subject, like: 

>

>   [PATCH v4.18] modules: always page-align module section.... 

>

> > From: Jessica Yu <jeyu at kernel.org> 

> > 

> > Some arches (e.g., arm64, x86) have moved towards non-executable 

> > module_alloc() allocations for security hardening reasons. That means 

> > that the module loader will need to set the text section of a module to 

> > executable, regardless of whether or not CONFIG_STRICT_MODULE_RWX is set. 

> > 

> > When CONFIG_STRICT_MODULE_RWX=y, module section allocations are always 

> > page-aligned to handle memory rwx permissions. On some arches with 

> > CONFIG_STRICT_MODULE_RWX=n however, when setting the module text to 

> > executable, the BUG_ON() in frob_text() gets triggered since module 

> > section allocations are not page-aligned when CONFIG_STRICT_MODULE_RWX=n. 

> > Since the set_memory_* API works with pages, and since we need to call 

> > set_memory_x() regardless of whether CONFIG_STRICT_MODULE_RWX is set, we 

> > might as well page-align all module section allocations for ease of 

> > managing rwx permissions of module sections (text, rodata, etc). 

> > 

> > Fixes: 2eef1399a866 ("modules: fix BUG when load module with rodata=n") 

> > Reported-by: Martin Kaiser <lists at kaiser.cx> 

> > Reported-by: Bartosz Golaszewski <brgl at bgdev.pl> 

> > Tested-by: David Lechner <david at lechnology.com> 

> > Tested-by: Martin Kaiser <martin at kaiser.cx> 

> > Tested-by: Bartosz Golaszewski <bgolaszewski at baylibre.com> 

> > Signed-off-by: Jessica Yu <jeyu at kernel.org> 

> > 

> > commit 38f054d549a869f22a02224cd276a27bf14b6171 upstream 

>

> Normally we put this right at the top of the long log.  Also this commit 

> ID appears bogus - it does not exist in mainline. 


Yes, it's from modules-next,

https://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git/commit/?h=modules-next


I can't wait as It blocks something.


>

> Also it seems very odd that the block of Signed-off lines are stuck in 

> the middle of the long log. 

>

> > 

> > When loading modules with CONFIG_ARCH_HAS_STRICT_MODULE_RWX enabled and 

> > CONFIG_STRICT_MODULE_RWX disabled, the memory allocated for modules would 

> > not be page-aligned and cause the following BUG during frob_text. 

> > 

> > ------------[ cut here ]------------ 

> > kernel BUG at kernel/module.c:1907! 

> > Internal error: Oops - BUG: 0 [#1] ARM 

> > Modules linked in: 

> > CPU: 0 PID: 89 Comm: systemd-modules Not tainted 5.3.0-rc2 #1 

> > Hardware name: ARM-Versatile (Device Tree Support) 

> > PC is at frob_text.constprop.0+0x2c/0x40 

> > LR is at load_module+0x14b4/0x1d28 

> > pc : [<c0082930>]    lr : [<c0084bb0>]    psr: 20000013 

> > sp : ce44fe58  ip : 00000000  fp : 00000000 

> > r10: 00000000  r9 : ce44feb8  r8 : 00000000 

> > r7 : 00000001  r6 : bf00032c  r5 : ce44ff40  r4 : bf000320 

> > r3 : bf000400  r2 : 00000fff  r1 : 00000220  r0 : bf000000 

> > Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none 

> > Control: 00093177  Table: 0e4c0000  DAC: 00000051 

> > Process systemd-modules (pid: 89, stack limit = 0x9fccc8dc) 

> > Stack: (0xce44fe58 to 0xce450000) 

> > fe40:                                                       00000000 cf1b05b8 

> > fe60: 00000001 ce47cf08 bf002754 c07ae5d8 d0a2a484 bf002060 bf0004f8 00000000 

> > fe80: b6d17910 c017cf1c ce47cf00 d0a29000 ce47cf00 ce44ff34 000014fc 00000000 

> > fea0: 00000000 00000000 bf00025c 00000001 00000000 00000000 6e72656b 00006c65 

> > fec0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

> > fee0: 00000000 00000000 00000000 00000000 00000000 c0ac9048 7fffffff 00000000 

> > ff00: b6d17910 00000005 0000017b c0009208 ce44e000 00000000 b6ebfe54 c008562c 

> > ff20: 7fffffff 00000000 00000003 cefd28f8 00000001 d0a29000 000014fc 00000000 

> > ff40: d0a292cb d0a29380 d0a29000 000014fc d0a29f0c d0a29d90 d0a29a60 00000520 

> > ff60: 00000710 00000718 00000826 00000000 00000000 00000000 00000708 00000023 

> > ff80: 00000024 0000001c 00000000 00000016 00000000 c0ac9048 0041c620 00000000 

> > ffa0: 00000000 c0009000 0041c620 00000000 00000005 b6d17910 00000000 00000000 

> > ffc0: 0041c620 00000000 00000000 0000017b 0041f078 00000000 004098b0 b6ebfe54 

> > ffe0: bedb6bc8 bedb6bb8 b6d0f91c b6c945a0 60000010 00000005 00000000 00000000 

> > [<c0082930>] (frob_text.constprop.0) from [<c0084bb0>] (load_module+0x14b4/0x1d28) 

> > [<c0084bb0>] (load_module) from [<c008562c>] (sys_finit_module+0xa0/0xc4) 

> > [<c008562c>] (sys_finit_module) from [<c0009000>] (ret_fast_syscall+0x0/0x50) 

> > Exception stack(0xce44ffa8 to 0xce44fff0) 

> > ffa0:                   0041c620 00000000 00000005 b6d17910 00000000 00000000 

> > ffc0: 0041c620 00000000 00000000 0000017b 0041f078 00000000 004098b0 b6ebfe54 

> > ffe0: bedb6bc8 bedb6bb8 b6d0f91c b6c945a0 

> > Code: e7f001f2 e5931008 e1110002 0a000001 (e7f001f2) 

> > ---[ end trace e904557128d9aed5 ]--- 

> > 

> > Signed-off-by: He Zhe <zhe.he at windriver.com> 

> > --- 

> > This is for linux-yocto-dev all branches. 

>

> The version information is important, and shouldnt be hidden down here. 

> If you put it within the [PATCH ....] square bracket section, the 

> maintainer/merger person will see it and the "git am" will throw it away 

> once applied. 


Fair points. Thanks, Paul.


Zhe


>

> Paul. 

> -- 

>

> > 

> >  kernel/module.c | 7 +------ 

> >  1 file changed, 1 insertion(+), 6 deletions(-) 

> > 

> > diff --git a/kernel/module.c b/kernel/module.c 

> > index 5933395..cd8df51 100644 

> > --- a/kernel/module.c 

> > +++ b/kernel/module.c 

> > @@ -64,14 +64,9 @@ 

> >  

> >  /* 

> >   * Modules' sections will be aligned on page boundaries 

> > - * to ensure complete separation of code and data, but 

> > - * only when CONFIG_STRICT_MODULE_RWX=y 

> > + * to ensure complete separation of code and data 

> >   */ 

> > -#ifdef CONFIG_STRICT_MODULE_RWX 

> >  # define debug_align(X) ALIGN(X, PAGE_SIZE) 

> > -#else 

> > -# define debug_align(X) (X) 

> > -#endif 

> >  

> >  /* If this is set, the section belongs in the init part of the module */ 

> >  #define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1)) 

> > -- 

> > 2.7.4 

> > 

> > -- 

> > _______________________________________________ 

> > linux-yocto mailing list 

> > linux-yocto at yoctoproject.org 

> > https://lists.yoctoproject.org/listinfo/linux-yocto 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/linux-yocto/attachments/20190817/8a5deedd/attachment-0001.html>


More information about the linux-yocto mailing list