[PATCH 2/2] riscv: patch: skip fixmap mapping when kernel text is already writable
Xiaofeng Yuan
xiaofengmian at 163.com
Wed Jul 1 03:28:22 PDT 2026
Currently patch_map() always creates a temporary writable mapping via
fixmap for kernel text addresses, even when CONFIG_STRICT_KERNEL_RWX
is disabled and the kernel text is already mapped with _PAGE_WRITE.
This is unnecessary overhead at best, and on minimal configurations
it can cause page faults.
Skip the fixmap path for kernel text when CONFIG_STRICT_KERNEL_RWX
is not enabled, since the text pages are already writable in this case.
Signed-off-by: Xiaofeng Yuan <xiaofengmian at 163.com>
---
arch/riscv/kernel/patch.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/riscv/kernel/patch.c b/arch/riscv/kernel/patch.c
index 16b243376..b6e8e1e83 100644
--- a/arch/riscv/kernel/patch.c
+++ b/arch/riscv/kernel/patch.c
@@ -44,7 +44,8 @@ static __always_inline void *patch_map(void *addr, const unsigned int fixmap)
uintptr_t uintaddr = (uintptr_t) addr;
phys_addr_t phys;
- if (core_kernel_text(uintaddr) || is_kernel_exittext(uintaddr)) {
+ if (IS_ENABLED(CONFIG_STRICT_KERNEL_RWX) &&
+ (core_kernel_text(uintaddr) || is_kernel_exittext(uintaddr))) {
phys = __pa_symbol(addr);
} else if (IS_ENABLED(CONFIG_STRICT_MODULE_RWX)) {
struct page *page = vmalloc_to_page(addr);
--
2.43.0
More information about the linux-riscv
mailing list