Commit Graph

4 Commits

Author SHA1 Message Date
Donald Dutile 985fe82319 module: replace module_layout with module_memory
JIRA: https://issues.redhat.com/browse/RHEL-28063

Conflict: Remove PPC's module_32.c hunk since not supported in RHEL.

commit ac3b43283923440900b4f36ca5f9f0b1ca43b70e
Author: Song Liu <song@kernel.org>
Date:   Mon Feb 6 16:28:02 2023 -0800

    module: replace module_layout with module_memory

    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 <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
    Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>

Signed-off-by: Donald Dutile <ddutile@redhat.com>
2024-06-17 14:17:22 -04:00
Donald Dutile 76837e4c34 module: Modify module_flags() to accept show_state argument
JIRA: https://issues.redhat.com/browse/RHEL-28063

commit 17dd25c29cda98c370f8d5a4ae3daee33fac1669
Author: Aaron Tomlin <atomlin@redhat.com>
Date:   Thu Jul 14 16:39:31 2022 +0100

    module: Modify module_flags() to accept show_state argument

    No functional change.

    With this patch a given module's state information (i.e. 'mod->state')
    can be omitted from the specified buffer. Please note that this is in
    preparation to include the last unloaded module's taint flag(s),
    if available.

    Signed-off-by: Aaron Tomlin <atomlin@redhat.com>
    Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>

Signed-off-by: Donald Dutile <ddutile@redhat.com>
2024-06-17 14:17:18 -04:00
Donald Dutile eebea0a15e module: Add CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
JIRA: https://issues.redhat.com/browse/RHEL-28063

commit 01dc0386efb769056257410ba5754558384006a7
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Wed Feb 23 13:02:14 2022 +0100

    module: Add CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC

    Add CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC to allow architectures
    to request having modules data in vmalloc area instead of module area.

    This is required on powerpc book3s/32 in order to set data non
    executable, because it is not possible to set executability on page
    basis, this is done per 256 Mbytes segments. The module area has exec
    right, vmalloc area has noexec.

    This can also be useful on other powerpc/32 in order to maximize the
    chance of code being close enough to kernel core to avoid branch
    trampolines.

    Cc: Jason Wessel <jason.wessel@windriver.com>
    Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
    Cc: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    [mcgrof: rebased in light of kernel/module/kdb.c move]
    Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>

Signed-off-by: Donald Dutile <ddutile@redhat.com>
2024-06-17 14:17:14 -04:00
Donald Dutile 87cd922cd5 module: Move procfs support into a separate file
JIRA: https://issues.redhat.com/browse/RHEL-28063

commit 0ffc40f6c8ab684e694774ebc835b198398129a8
Author: Aaron Tomlin <atomlin@redhat.com>
Date:   Tue Mar 22 14:03:41 2022 +0000

    module: Move procfs support into a separate file

    No functional change.

    This patch migrates code that allows one to generate a
    list of loaded/or linked modules via /proc when procfs
    support is enabled into kernel/module/procfs.c.

    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Aaron Tomlin <atomlin@redhat.com>
    Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>

Signed-off-by: Donald Dutile <ddutile@redhat.com>
2024-06-17 14:17:13 -04:00