Thread (3 messages) 3 messages, 3 authors, 2023-02-02

Re: [PATCH v8] module: replace module_layout with module_memory

From: Song Liu <hidden>
Date: 2023-02-02 19:49:21
Also in: lkml

On Feb 1, 2023, at 11:23 PM, Christophe Leroy [off-list ref] wrote:



Le 01/02/2023 à 23:32, Song Liu a écrit :
quoted
module_layout manages different types of memory (text, data, rodata, etc.)
in one allocation, which is problematic for some reasons:

1. It is hard to enable CONFIG_STRICT_MODULE_RWX.
2. It is hard to use huge pages in modules (and not break strict rwx).
3. Many archs uses module_layout for arch-specific data, but it is not
   obvious how these data are used (are they RO, RX, or RW?)

Improve the scenario by replacing 2 (or 3) module_layout per module with
up to 7 module_memory per module:

        MOD_TEXT,
        MOD_DATA,
        MOD_RODATA,
        MOD_RO_AFTER_INIT,
        MOD_INIT_TEXT,
        MOD_INIT_DATA,
        MOD_INIT_RODATA,

and allocating them separately. This adds slightly more entries to
mod_tree (from up to 3 entries per module, to up to 7 entries per
module). However, this at most adds a small constant overhead to
__module_address(), which is expected to be fast.

Various archs use module_layout for different data. These data are put
into different module_memory based on their location in module_layout.
IOW, data that used to go with text is allocated with MOD_MEM_TYPE_TEXT;
data that used to go with data is allocated with MOD_MEM_TYPE_DATA, etc.

module_memory simplifies quite some of the module code. For example,
ARCH_WANTS_MODULES_DATA_IN_VMALLOC is a lot cleaner, as it just uses a
different allocator for the data. kernel/module/strict_rwx.c is also
much cleaner with module_memory.

Signed-off-by: Song Liu <song@kernel.org>
Cc: Luis Chamberlain <mcgrof@kernel.org>
Cc: Thomas Gleixner <redacted>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Christophe Leroy <redacted>
  CALL    scripts/checksyscalls.sh
  CC      kernel/module/main.o
kernel/module/main.c: In function 'mod_mem_use_vmalloc':
kernel/module/main.c:1175:16: error: implicit declaration of function 
'mod_mem_is_core_data'; did you mean 'mod_mem_type_is_core_data'? 
[-Werror=implicit-function-declaration]
 1175 |         return mod_mem_is_core_data(type);
      |                ^~~~~~~~~~~~~~~~~~~~
      |                mod_mem_type_is_core_data
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:252: kernel/module/main.o] Error 1
make[2]: *** [scripts/Makefile.build:504: kernel/module] Error 2
make[1]: *** [scripts/Makefile.build:504: kernel] Error 2
make: *** [Makefile:2024: .] Error 2
Oops..  

Let me get this through build tests by kernel test bot.

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