Thread (21 messages) 21 messages, 2 authors, 2021-05-05

Re: [PATCH v11 3/9] powerpc: Always define MODULES_{VADDR,END}

From: Christophe Leroy <hidden>
Date: 2021-05-03 06:32:42


Le 03/05/2021 à 08:26, Jordan Niethe a écrit :
On Mon, May 3, 2021 at 4:22 PM Christophe Leroy
[off-list ref] wrote:
quoted


Le 03/05/2021 à 08:16, Jordan Niethe a écrit :
quoted
On Mon, May 3, 2021 at 3:57 PM Christophe Leroy
[off-list ref] wrote:
quoted


Le 03/05/2021 à 07:39, Jordan Niethe a écrit :
quoted
On Thu, Apr 29, 2021 at 3:04 PM Christophe Leroy
[off-list ref] wrote:
quoted


Le 29/04/2021 à 05:15, Jordan Niethe a écrit :
quoted
If MODULES_{VADDR,END} are not defined set them to VMALLOC_START and
VMALLOC_END respectively. This reduces the need for special cases. For
example, powerpc's module_alloc() was previously predicated on
MODULES_VADDR being defined but now is unconditionally defined.

This will be useful reducing conditional code in other places that need
to allocate from the module region (i.e., kprobes).

Signed-off-by: Jordan Niethe <redacted>
---
v10: New to series
v11: - Consider more places MODULES_VADDR was being used
---
     arch/powerpc/include/asm/pgtable.h    | 11 +++++++++++
     arch/powerpc/kernel/module.c          |  5 +----
     arch/powerpc/mm/kasan/kasan_init_32.c | 10 +++++-----
     arch/powerpc/mm/ptdump/ptdump.c       |  4 ++--
     4 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h
index c6a676714f04..882fda779648 100644
--- a/arch/powerpc/include/asm/pgtable.h
+++ b/arch/powerpc/include/asm/pgtable.h
@@ -39,6 +39,17 @@ struct mm_struct;
     #define __S110      PAGE_SHARED_X
     #define __S111      PAGE_SHARED_X

+#ifndef MODULES_VADDR
+#define MODULES_VADDR VMALLOC_START
+#define MODULES_END VMALLOC_END
+#endif
+
+#if defined(CONFIG_PPC_BOOK3S_32) && defined(CONFIG_STRICT_KERNEL_RWX)
No no.

TASK_SIZE > MODULES_VADDR is ALWAYS wrong, for any target, in any configuration.

Why is it a problem to leave the test as a BUILD_BUG_ON() in module_alloc() ?
On ppc64s, MODULES_VADDR is __vmalloc_start (a variable)  and
TASK_SIZE depends on current.
Also for nohash like 44x, MODULES_VADDR is defined based on high_memory.
If I put it back in module_alloc() and wrap it with #ifdef
CONFIG_PPC_BOOK3S_32 will that be fine?
Thinking about it once more, I think the best approach is the one taken by Nick in
https://patchwork.ozlabs.org/project/linuxppc-dev/patch/20210502110050.324953-1-npiggin@gmail.com/

Use MODULES_VADDR/MODULES_END when it exists, use VMALLOC_START/VMALLOC_END otherwise.

I know I suggested to always define MODULES_VADDR, but maybe that's not the best solution at the end.
Sure, let's do it like that.
quoted
For kprobes, is there a way to re-use functions from modules.c in alloc_insn_page() ?
Probably we can use module_alloc() then the set_memory_ functions to
get the permissions right.
Something like we had in v9:
https://lore.kernel.org/linuxppc-dev/20210316031741.1004850-3-jniethe5@gmail.com/ (local)
Yes, more or less, but using module_alloc() instead of vmalloc().
And module_alloc() implies EXEC, so only the set_memory_ro() will be required.
Yep.
quoted
I see no point in doing any set_memory_xxx() in free_insn_page(), because as soon as you do a
vfree() the page is not mapped anymore so any access will lead to a fault.
Yeah, I'd not realised we had VM_FLUSH_RESET_PERMS when I added that.
I agree it's pointless.
At the end if should be quite similar to what S390 architecture does.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help