[PATCH v3 0/6] arm64: module: improve module VA range selection
Mark Rutland
mark.rutland at arm.com
Tue May 30 04:03:22 PDT 2023
This series (based on v6.4-rc3) aims to make arm64's module allocation
code more robust. To that end:
* Redundant code for KASAN && !KASAN_VMALLOC is removed, as this
combination is no longer possible.
* Module PLT support is mandated, always allowing for the use of a 2G
module region. Practically speaking, this is already the case for almost
all users as module PLT support is mandated by both KASLR (which most
distros including Android, enable this), and by the workaround for ARM
erratum 843419 (required by Cortex-A53).
* The module VA region selection is moved to module.c, making it
self-contained and easier to follow.
* The default module VA region is expanded to 2G. This ensures that
there is sufficient space for the full region using PLTs even when
KASLR is disabled or no seed provided.
* The module VA range init code is updated to log when the kernel is too
large to support the use of a 128M or 2G module region, to enable
debugging of these cases. Contemporary kernels built with debug
options can be bigger than 128M, and a kernel bigger than 2G is
unlikely but theoretically possible. Adding this logging should help
to debug or filter away reports for such cases.
This should allow for loading of very large modules, as Shanker reported
was an issue:
https://lore.kernel.org/linux-arm-kernel/20230326170756.3021936-1-sdonthineni@nvidia.com/
https://lore.kernel.org/linux-arm-kernel/20230330140437.984211-1-sdonthineni@nvidia.com/
... and as Ard had an alternative series for:
https://lore.kernel.org/linux-arm-kernel/20230404135437.2744866-1-ardb@kernel.org/
Since v1 [1]:
* Log the number of pages in range
* Remove unused kasan_mod_shadow_end
* Only randomize when kaslr_enabled()
* Simplify control-flow
Since v2 [2]:
* Apply Ard's Reviewed-by tags
* Fix typos
* Rebave to v6.4-rc3 (trivial)
[1] https://lore.kernel.org/linux-arm-kernel/20230509111451.4184972-1-mark.rutland@arm.com/
[2] https://lore.kernel.org/linux-arm-kernel/20230512152210.3072475-1-mark.rutland@arm.com/
Thanks,
Mark.
Mark Rutland (6):
arm64: module: remove old !KASAN_VMALLOC logic
arm64: kasan: remove !KASAN_VMALLOC remnants
arm64: kaslr: split kaslr/module initialization
arm64: module: move module randomization to module.c
arm64: module: mandate MODULE_PLTS
arm64: module: rework module VA range selection
Documentation/arm64/memory.rst | 8 +-
arch/arm64/Kconfig | 28 +----
arch/arm64/include/asm/memory.h | 16 +--
arch/arm64/include/asm/module.h | 8 --
arch/arm64/include/asm/module.lds.h | 2 -
arch/arm64/kernel/Makefile | 3 +-
arch/arm64/kernel/ftrace.c | 8 +-
arch/arm64/kernel/kaslr.c | 83 +++------------
arch/arm64/kernel/module.c | 159 +++++++++++++++++++++-------
arch/arm64/kernel/setup.c | 2 +
arch/arm64/mm/kasan_init.c | 17 +--
11 files changed, 159 insertions(+), 175 deletions(-)
--
2.30.2
More information about the linux-arm-kernel
mailing list