Thread (55 messages) 55 messages, 10 authors, 2023-07-20

Re: [PATCH 12/13] x86/jitalloc: prepare to allocate exectuatble memory as ROX

From: Song Liu <song@kernel.org>
Date: 2023-06-02 00:02:36
Also in: bpf, linux-arm-kernel, linux-mips, linux-modules, linux-riscv, linux-s390, linux-trace-kernel, lkml, loongarch, netdev, sparclinux

On Thu, Jun 1, 2023 at 4:07 AM Mike Rapoport [off-list ref] wrote:
quoted hunk ↗ jump to hunk
On Thu, Jun 01, 2023 at 12:30:50PM +0200, Peter Zijlstra wrote:
quoted
On Thu, Jun 01, 2023 at 01:12:56PM +0300, Mike Rapoport wrote:
quoted
+static void __init_or_module do_text_poke(void *addr, const void *opcode, size_t len)
+{
+   if (system_state < SYSTEM_RUNNING) {
+           text_poke_early(addr, opcode, len);
+   } else {
+           mutex_lock(&text_mutex);
+           text_poke(addr, opcode, len);
+           mutex_unlock(&text_mutex);
+   }
+}
So I don't much like do_text_poke(); why?
I believe the idea was to keep memcpy for early boot before the kernel
image is protected without going and adding if (is_module_text_address())
all over the place.

I think this can be used instead without updating all the call sites of
text_poke_early():
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index 91057de8e6bc..f994e63e9903 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -1458,7 +1458,7 @@ void __init_or_module text_poke_early(void *addr, const void *opcode,
                 * code cannot be running and speculative code-fetches are
                 * prevented. Just change the code.
                 */
-               memcpy(addr, opcode, len);
+               text_poke_copy(addr, opcode, len);
        } else {
                local_irq_save(flags);
                memcpy(addr, opcode, len);
This alone doesn't work, as text_poke_early() is called
before addr is added to the list of module texts. So we
still use memcpy() here.

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