From: Mike Rapoport <rppt@kernel.org>
To: Song Liu <song@kernel.org>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
"David S. Miller" <davem@davemloft.net>,
Dinh Nguyen <dinguyen@kernel.org>,
Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
Huacai Chen <chenhuacai@kernel.org>,
Kent Overstreet <kent.overstreet@linux.dev>,
Luis Chamberlain <mcgrof@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nadav Amit <nadav.amit@gmail.com>,
"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Puranjay Mohan <puranjay12@gmail.com>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
Russell King <linux@armlinux.org.uk>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Thomas Gleixner <tglx@linutronix.de>,
Will Deacon <will@kernel.org>,
bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-mips@vger.kernel.org, linux-mm@kvack.org,
linux-modules@vger.kernel.org, linux-parisc@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
linux-trace-kernel@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
netdev@vger.kernel.org, sparclinux@vger.kernel.org,
x86@kernel.org
Subject: Re: [PATCH v2 04/12] mm/execmem, arch: convert remaining overrides of module_alloc to execmem
Date: Sat, 17 Jun 2023 09:14:44 +0300 [thread overview]
Message-ID: <20230617061444.GP52412@kernel.org> (raw)
In-Reply-To: <CAPhsuW7xE8sz8Nh2AdNb62k=8kgEPxaBCw3w50EfXraxmKca-A@mail.gmail.com>
On Fri, Jun 16, 2023 at 11:53:54AM -0700, Song Liu wrote:
> On Fri, Jun 16, 2023 at 1:51 AM Mike Rapoport <rppt@kernel.org> wrote:
> [...]
> > diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c
> > index 5af4975caeb5..c3d999f3a3dd 100644
> > --- a/arch/arm64/kernel/module.c
> > +++ b/arch/arm64/kernel/module.c
> > @@ -17,56 +17,50 @@
> > #include <linux/moduleloader.h>
> > #include <linux/scs.h>
> > #include <linux/vmalloc.h>
> > +#include <linux/execmem.h>
> > #include <asm/alternative.h>
> > #include <asm/insn.h>
> > #include <asm/scs.h>
> > #include <asm/sections.h>
> >
> > -void *module_alloc(unsigned long size)
> > +static struct execmem_params execmem_params = {
> > + .modules = {
> > + .flags = EXECMEM_KASAN_SHADOW,
> > + .text = {
> > + .alignment = MODULE_ALIGN,
> > + },
> > + },
> > +};
> > +
> > +struct execmem_params __init *execmem_arch_params(void)
> > {
> > u64 module_alloc_end = module_alloc_base + MODULES_VSIZE;
> > - gfp_t gfp_mask = GFP_KERNEL;
> > - void *p;
> > -
> > - /* Silence the initial allocation */
> > - if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS))
> > - gfp_mask |= __GFP_NOWARN;
> >
> > - if (IS_ENABLED(CONFIG_KASAN_GENERIC) ||
> > - IS_ENABLED(CONFIG_KASAN_SW_TAGS))
> > - /* don't exceed the static module region - see below */
> > - module_alloc_end = MODULES_END;
> > + execmem_params.modules.text.pgprot = PAGE_KERNEL;
> > + execmem_params.modules.text.start = module_alloc_base;
>
> I think I mentioned this earlier. For arm64 with CONFIG_RANDOMIZE_BASE,
> module_alloc_base is not yet set when execmem_arch_params() is
> called. So we will need some extra logic for this.
Right, this is taken care of in a later patch, but it actually belongs here.
Good catch!
> Thanks,
> Song
>
>
> > + execmem_params.modules.text.end = module_alloc_end;
> >
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_end, gfp_mask, PAGE_KERNEL, VM_DEFER_KMEMLEAK,
> > - NUMA_NO_NODE, __builtin_return_address(0));
> > -
> > - if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > + /*
> > + * KASAN without KASAN_VMALLOC can only deal with module
> > + * allocations being served from the reserved module region,
> > + * since the remainder of the vmalloc region is already
> > + * backed by zero shadow pages, and punching holes into it
> > + * is non-trivial. Since the module region is not randomized
> > + * when KASAN is enabled without KASAN_VMALLOC, it is even
> > + * less likely that the module region gets exhausted, so we
> > + * can simply omit this fallback in that case.
> > + */
> > + if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > (IS_ENABLED(CONFIG_KASAN_VMALLOC) ||
> > (!IS_ENABLED(CONFIG_KASAN_GENERIC) &&
> > - !IS_ENABLED(CONFIG_KASAN_SW_TAGS))))
> > - /*
> > - * KASAN without KASAN_VMALLOC can only deal with module
> > - * allocations being served from the reserved module region,
> > - * since the remainder of the vmalloc region is already
> > - * backed by zero shadow pages, and punching holes into it
> > - * is non-trivial. Since the module region is not randomized
> > - * when KASAN is enabled without KASAN_VMALLOC, it is even
> > - * less likely that the module region gets exhausted, so we
> > - * can simply omit this fallback in that case.
> > - */
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_base + SZ_2G, GFP_KERNEL,
> > - PAGE_KERNEL, 0, NUMA_NO_NODE,
> > - __builtin_return_address(0));
> > -
> > - if (p && (kasan_alloc_module_shadow(p, size, gfp_mask) < 0)) {
> > - vfree(p);
> > - return NULL;
> > + !IS_ENABLED(CONFIG_KASAN_SW_TAGS)))) {
> > + unsigned long end = module_alloc_base + SZ_2G;
> > +
> > + execmem_params.modules.text.fallback_start = module_alloc_base;
> > + execmem_params.modules.text.fallback_end = end;
> > }
> >
> > - /* Memory is intended to be executable, reset the pointer tag. */
> > - return kasan_reset_tag(p);
> > + return &execmem_params;
> > }
> >
> > enum aarch64_reloc_op {
--
Sincerely yours,
Mike.
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Song Liu <song@kernel.org>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
"David S. Miller" <davem@davemloft.net>,
Dinh Nguyen <dinguyen@kernel.org>,
Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
Huacai Chen <chenhuacai@kernel.org>,
Kent Overstreet <kent.overstreet@linux.dev>,
Luis Chamberlain <mcgrof@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nadav Amit <nadav.amit@gmail.com>,
"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Puranjay Mohan <puranjay12@gmail.com>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
Russell King <linux@armlinux.org.uk>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Thomas Gleixner <tglx@linutronix.de>,
Will Deacon <will@kernel.org>,
bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-mips@vger.kernel.org, linux-mm@kvack.org,
linux-modules@vger.kernel.org, linux-parisc@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
linux-trace-kernel@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
netdev@vger.kernel.org, sparclinux@vger.kernel.org,
x86@kernel.org
Subject: Re: [PATCH v2 04/12] mm/execmem, arch: convert remaining overrides of module_alloc to execmem
Date: Sat, 17 Jun 2023 09:14:44 +0300 [thread overview]
Message-ID: <20230617061444.GP52412@kernel.org> (raw)
In-Reply-To: <CAPhsuW7xE8sz8Nh2AdNb62k=8kgEPxaBCw3w50EfXraxmKca-A@mail.gmail.com>
On Fri, Jun 16, 2023 at 11:53:54AM -0700, Song Liu wrote:
> On Fri, Jun 16, 2023 at 1:51 AM Mike Rapoport <rppt@kernel.org> wrote:
> [...]
> > diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c
> > index 5af4975caeb5..c3d999f3a3dd 100644
> > --- a/arch/arm64/kernel/module.c
> > +++ b/arch/arm64/kernel/module.c
> > @@ -17,56 +17,50 @@
> > #include <linux/moduleloader.h>
> > #include <linux/scs.h>
> > #include <linux/vmalloc.h>
> > +#include <linux/execmem.h>
> > #include <asm/alternative.h>
> > #include <asm/insn.h>
> > #include <asm/scs.h>
> > #include <asm/sections.h>
> >
> > -void *module_alloc(unsigned long size)
> > +static struct execmem_params execmem_params = {
> > + .modules = {
> > + .flags = EXECMEM_KASAN_SHADOW,
> > + .text = {
> > + .alignment = MODULE_ALIGN,
> > + },
> > + },
> > +};
> > +
> > +struct execmem_params __init *execmem_arch_params(void)
> > {
> > u64 module_alloc_end = module_alloc_base + MODULES_VSIZE;
> > - gfp_t gfp_mask = GFP_KERNEL;
> > - void *p;
> > -
> > - /* Silence the initial allocation */
> > - if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS))
> > - gfp_mask |= __GFP_NOWARN;
> >
> > - if (IS_ENABLED(CONFIG_KASAN_GENERIC) ||
> > - IS_ENABLED(CONFIG_KASAN_SW_TAGS))
> > - /* don't exceed the static module region - see below */
> > - module_alloc_end = MODULES_END;
> > + execmem_params.modules.text.pgprot = PAGE_KERNEL;
> > + execmem_params.modules.text.start = module_alloc_base;
>
> I think I mentioned this earlier. For arm64 with CONFIG_RANDOMIZE_BASE,
> module_alloc_base is not yet set when execmem_arch_params() is
> called. So we will need some extra logic for this.
Right, this is taken care of in a later patch, but it actually belongs here.
Good catch!
> Thanks,
> Song
>
>
> > + execmem_params.modules.text.end = module_alloc_end;
> >
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_end, gfp_mask, PAGE_KERNEL, VM_DEFER_KMEMLEAK,
> > - NUMA_NO_NODE, __builtin_return_address(0));
> > -
> > - if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > + /*
> > + * KASAN without KASAN_VMALLOC can only deal with module
> > + * allocations being served from the reserved module region,
> > + * since the remainder of the vmalloc region is already
> > + * backed by zero shadow pages, and punching holes into it
> > + * is non-trivial. Since the module region is not randomized
> > + * when KASAN is enabled without KASAN_VMALLOC, it is even
> > + * less likely that the module region gets exhausted, so we
> > + * can simply omit this fallback in that case.
> > + */
> > + if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > (IS_ENABLED(CONFIG_KASAN_VMALLOC) ||
> > (!IS_ENABLED(CONFIG_KASAN_GENERIC) &&
> > - !IS_ENABLED(CONFIG_KASAN_SW_TAGS))))
> > - /*
> > - * KASAN without KASAN_VMALLOC can only deal with module
> > - * allocations being served from the reserved module region,
> > - * since the remainder of the vmalloc region is already
> > - * backed by zero shadow pages, and punching holes into it
> > - * is non-trivial. Since the module region is not randomized
> > - * when KASAN is enabled without KASAN_VMALLOC, it is even
> > - * less likely that the module region gets exhausted, so we
> > - * can simply omit this fallback in that case.
> > - */
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_base + SZ_2G, GFP_KERNEL,
> > - PAGE_KERNEL, 0, NUMA_NO_NODE,
> > - __builtin_return_address(0));
> > -
> > - if (p && (kasan_alloc_module_shadow(p, size, gfp_mask) < 0)) {
> > - vfree(p);
> > - return NULL;
> > + !IS_ENABLED(CONFIG_KASAN_SW_TAGS)))) {
> > + unsigned long end = module_alloc_base + SZ_2G;
> > +
> > + execmem_params.modules.text.fallback_start = module_alloc_base;
> > + execmem_params.modules.text.fallback_end = end;
> > }
> >
> > - /* Memory is intended to be executable, reset the pointer tag. */
> > - return kasan_reset_tag(p);
> > + return &execmem_params;
> > }
> >
> > enum aarch64_reloc_op {
--
Sincerely yours,
Mike.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Song Liu <song@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
x86@kernel.org, Catalin Marinas <catalin.marinas@arm.com>,
linux-mips@vger.kernel.org, linux-mm@kvack.org,
sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org,
Nadav Amit <nadav.amit@gmail.com>,
linux-s390@vger.kernel.org, Helge Deller <deller@gmx.de>,
Huacai Chen <chenhuacai@kernel.org>,
Russell King <linux@armlinux.org.uk>,
"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
linux-trace-kernel@vger.kernel.org, Will Deacon <will@kernel.org>,
Heiko Carstens <hca@linux.ibm.com>,
Steven Rostedt <rostedt@goodmis.org>,
loongarch@lists.linux.dev, Thomas Gleixner <tglx@linutronix.de>,
bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
linux-parisc@vger.kernel.org,
Puranjay Mohan <puranjay12@gmail.com>,
netdev@vger.kernel.org,
Kent Overstreet <kent.overstreet@linux.dev>,
linux-kernel@vger.kernel.org, Dinh Nguyen <dinguyen@kernel.org>,
Luis Chamberlain <mcgrof@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Andrew Morton <akpm@linux-foundation.org>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
linuxppc-dev@lists.ozlabs.org,
"David S. Miller" <davem@davemloft.net>,
linux-modules@vger.kernel.org
Subject: Re: [PATCH v2 04/12] mm/execmem, arch: convert remaining overrides of module_alloc to execmem
Date: Sat, 17 Jun 2023 09:14:44 +0300 [thread overview]
Message-ID: <20230617061444.GP52412@kernel.org> (raw)
In-Reply-To: <CAPhsuW7xE8sz8Nh2AdNb62k=8kgEPxaBCw3w50EfXraxmKca-A@mail.gmail.com>
On Fri, Jun 16, 2023 at 11:53:54AM -0700, Song Liu wrote:
> On Fri, Jun 16, 2023 at 1:51 AM Mike Rapoport <rppt@kernel.org> wrote:
> [...]
> > diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c
> > index 5af4975caeb5..c3d999f3a3dd 100644
> > --- a/arch/arm64/kernel/module.c
> > +++ b/arch/arm64/kernel/module.c
> > @@ -17,56 +17,50 @@
> > #include <linux/moduleloader.h>
> > #include <linux/scs.h>
> > #include <linux/vmalloc.h>
> > +#include <linux/execmem.h>
> > #include <asm/alternative.h>
> > #include <asm/insn.h>
> > #include <asm/scs.h>
> > #include <asm/sections.h>
> >
> > -void *module_alloc(unsigned long size)
> > +static struct execmem_params execmem_params = {
> > + .modules = {
> > + .flags = EXECMEM_KASAN_SHADOW,
> > + .text = {
> > + .alignment = MODULE_ALIGN,
> > + },
> > + },
> > +};
> > +
> > +struct execmem_params __init *execmem_arch_params(void)
> > {
> > u64 module_alloc_end = module_alloc_base + MODULES_VSIZE;
> > - gfp_t gfp_mask = GFP_KERNEL;
> > - void *p;
> > -
> > - /* Silence the initial allocation */
> > - if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS))
> > - gfp_mask |= __GFP_NOWARN;
> >
> > - if (IS_ENABLED(CONFIG_KASAN_GENERIC) ||
> > - IS_ENABLED(CONFIG_KASAN_SW_TAGS))
> > - /* don't exceed the static module region - see below */
> > - module_alloc_end = MODULES_END;
> > + execmem_params.modules.text.pgprot = PAGE_KERNEL;
> > + execmem_params.modules.text.start = module_alloc_base;
>
> I think I mentioned this earlier. For arm64 with CONFIG_RANDOMIZE_BASE,
> module_alloc_base is not yet set when execmem_arch_params() is
> called. So we will need some extra logic for this.
Right, this is taken care of in a later patch, but it actually belongs here.
Good catch!
> Thanks,
> Song
>
>
> > + execmem_params.modules.text.end = module_alloc_end;
> >
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_end, gfp_mask, PAGE_KERNEL, VM_DEFER_KMEMLEAK,
> > - NUMA_NO_NODE, __builtin_return_address(0));
> > -
> > - if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > + /*
> > + * KASAN without KASAN_VMALLOC can only deal with module
> > + * allocations being served from the reserved module region,
> > + * since the remainder of the vmalloc region is already
> > + * backed by zero shadow pages, and punching holes into it
> > + * is non-trivial. Since the module region is not randomized
> > + * when KASAN is enabled without KASAN_VMALLOC, it is even
> > + * less likely that the module region gets exhausted, so we
> > + * can simply omit this fallback in that case.
> > + */
> > + if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > (IS_ENABLED(CONFIG_KASAN_VMALLOC) ||
> > (!IS_ENABLED(CONFIG_KASAN_GENERIC) &&
> > - !IS_ENABLED(CONFIG_KASAN_SW_TAGS))))
> > - /*
> > - * KASAN without KASAN_VMALLOC can only deal with module
> > - * allocations being served from the reserved module region,
> > - * since the remainder of the vmalloc region is already
> > - * backed by zero shadow pages, and punching holes into it
> > - * is non-trivial. Since the module region is not randomized
> > - * when KASAN is enabled without KASAN_VMALLOC, it is even
> > - * less likely that the module region gets exhausted, so we
> > - * can simply omit this fallback in that case.
> > - */
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_base + SZ_2G, GFP_KERNEL,
> > - PAGE_KERNEL, 0, NUMA_NO_NODE,
> > - __builtin_return_address(0));
> > -
> > - if (p && (kasan_alloc_module_shadow(p, size, gfp_mask) < 0)) {
> > - vfree(p);
> > - return NULL;
> > + !IS_ENABLED(CONFIG_KASAN_SW_TAGS)))) {
> > + unsigned long end = module_alloc_base + SZ_2G;
> > +
> > + execmem_params.modules.text.fallback_start = module_alloc_base;
> > + execmem_params.modules.text.fallback_end = end;
> > }
> >
> > - /* Memory is intended to be executable, reset the pointer tag. */
> > - return kasan_reset_tag(p);
> > + return &execmem_params;
> > }
> >
> > enum aarch64_reloc_op {
--
Sincerely yours,
Mike.
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Song Liu <song@kernel.org>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
"David S. Miller" <davem@davemloft.net>,
Dinh Nguyen <dinguyen@kernel.org>,
Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
Huacai Chen <chenhuacai@kernel.org>,
Kent Overstreet <kent.overstreet@linux.dev>,
Luis Chamberlain <mcgrof@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nadav Amit <nadav.amit@gmail.com>,
"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Puranjay Mohan <puranjay12@gmail.com>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
Russell King <linux@armlinux.org.uk>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Thomas Gleixner <tglx@linutronix.de>,
Will Deacon <will@kernel.org>,
bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-mips@vger.kernel.org, linux-mm@kvack.org,
linux-modules@vger.kernel.org, linux-parisc@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
linux-trace-kernel@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
netdev@vger.kernel.org, sparclinux@vger.kernel.org,
x86@kernel.org
Subject: Re: [PATCH v2 04/12] mm/execmem, arch: convert remaining overrides of module_alloc to execmem
Date: Sat, 17 Jun 2023 09:14:44 +0300 [thread overview]
Message-ID: <20230617061444.GP52412@kernel.org> (raw)
In-Reply-To: <CAPhsuW7xE8sz8Nh2AdNb62k=8kgEPxaBCw3w50EfXraxmKca-A@mail.gmail.com>
On Fri, Jun 16, 2023 at 11:53:54AM -0700, Song Liu wrote:
> On Fri, Jun 16, 2023 at 1:51 AM Mike Rapoport <rppt@kernel.org> wrote:
> [...]
> > diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c
> > index 5af4975caeb5..c3d999f3a3dd 100644
> > --- a/arch/arm64/kernel/module.c
> > +++ b/arch/arm64/kernel/module.c
> > @@ -17,56 +17,50 @@
> > #include <linux/moduleloader.h>
> > #include <linux/scs.h>
> > #include <linux/vmalloc.h>
> > +#include <linux/execmem.h>
> > #include <asm/alternative.h>
> > #include <asm/insn.h>
> > #include <asm/scs.h>
> > #include <asm/sections.h>
> >
> > -void *module_alloc(unsigned long size)
> > +static struct execmem_params execmem_params = {
> > + .modules = {
> > + .flags = EXECMEM_KASAN_SHADOW,
> > + .text = {
> > + .alignment = MODULE_ALIGN,
> > + },
> > + },
> > +};
> > +
> > +struct execmem_params __init *execmem_arch_params(void)
> > {
> > u64 module_alloc_end = module_alloc_base + MODULES_VSIZE;
> > - gfp_t gfp_mask = GFP_KERNEL;
> > - void *p;
> > -
> > - /* Silence the initial allocation */
> > - if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS))
> > - gfp_mask |= __GFP_NOWARN;
> >
> > - if (IS_ENABLED(CONFIG_KASAN_GENERIC) ||
> > - IS_ENABLED(CONFIG_KASAN_SW_TAGS))
> > - /* don't exceed the static module region - see below */
> > - module_alloc_end = MODULES_END;
> > + execmem_params.modules.text.pgprot = PAGE_KERNEL;
> > + execmem_params.modules.text.start = module_alloc_base;
>
> I think I mentioned this earlier. For arm64 with CONFIG_RANDOMIZE_BASE,
> module_alloc_base is not yet set when execmem_arch_params() is
> called. So we will need some extra logic for this.
Right, this is taken care of in a later patch, but it actually belongs here.
Good catch!
> Thanks,
> Song
>
>
> > + execmem_params.modules.text.end = module_alloc_end;
> >
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_end, gfp_mask, PAGE_KERNEL, VM_DEFER_KMEMLEAK,
> > - NUMA_NO_NODE, __builtin_return_address(0));
> > -
> > - if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > + /*
> > + * KASAN without KASAN_VMALLOC can only deal with module
> > + * allocations being served from the reserved module region,
> > + * since the remainder of the vmalloc region is already
> > + * backed by zero shadow pages, and punching holes into it
> > + * is non-trivial. Since the module region is not randomized
> > + * when KASAN is enabled without KASAN_VMALLOC, it is even
> > + * less likely that the module region gets exhausted, so we
> > + * can simply omit this fallback in that case.
> > + */
> > + if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
> > (IS_ENABLED(CONFIG_KASAN_VMALLOC) ||
> > (!IS_ENABLED(CONFIG_KASAN_GENERIC) &&
> > - !IS_ENABLED(CONFIG_KASAN_SW_TAGS))))
> > - /*
> > - * KASAN without KASAN_VMALLOC can only deal with module
> > - * allocations being served from the reserved module region,
> > - * since the remainder of the vmalloc region is already
> > - * backed by zero shadow pages, and punching holes into it
> > - * is non-trivial. Since the module region is not randomized
> > - * when KASAN is enabled without KASAN_VMALLOC, it is even
> > - * less likely that the module region gets exhausted, so we
> > - * can simply omit this fallback in that case.
> > - */
> > - p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
> > - module_alloc_base + SZ_2G, GFP_KERNEL,
> > - PAGE_KERNEL, 0, NUMA_NO_NODE,
> > - __builtin_return_address(0));
> > -
> > - if (p && (kasan_alloc_module_shadow(p, size, gfp_mask) < 0)) {
> > - vfree(p);
> > - return NULL;
> > + !IS_ENABLED(CONFIG_KASAN_SW_TAGS)))) {
> > + unsigned long end = module_alloc_base + SZ_2G;
> > +
> > + execmem_params.modules.text.fallback_start = module_alloc_base;
> > + execmem_params.modules.text.fallback_end = end;
> > }
> >
> > - /* Memory is intended to be executable, reset the pointer tag. */
> > - return kasan_reset_tag(p);
> > + return &execmem_params;
> > }
> >
> > enum aarch64_reloc_op {
--
Sincerely yours,
Mike.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-06-17 6:15 UTC|newest]
Thread overview: 260+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-16 8:50 [PATCH v2 00/12] mm: jit/text allocator Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` [PATCH v2 01/12] nios2: define virtual address space for modules Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 16:00 ` Edgecombe, Rick P
2023-06-16 16:00 ` Edgecombe, Rick P
2023-06-16 16:00 ` Edgecombe, Rick P
2023-06-16 16:00 ` Edgecombe, Rick P
2023-06-17 5:52 ` Mike Rapoport
2023-06-17 5:52 ` Mike Rapoport
2023-06-17 5:52 ` Mike Rapoport
2023-06-17 5:52 ` Mike Rapoport
2023-06-16 18:14 ` Song Liu
2023-06-16 18:14 ` Song Liu
2023-06-16 18:14 ` Song Liu
2023-06-16 18:14 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 02/12] mm: introduce execmem_text_alloc() and jit_text_alloc() Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 16:48 ` Kent Overstreet
2023-06-16 16:48 ` Kent Overstreet
2023-06-16 16:48 ` Kent Overstreet
2023-06-16 16:48 ` Kent Overstreet
2023-06-16 18:18 ` Song Liu
2023-06-16 18:18 ` Song Liu
2023-06-16 18:18 ` Song Liu
2023-06-16 18:18 ` Song Liu
2023-06-17 5:57 ` Mike Rapoport
2023-06-17 5:57 ` Mike Rapoport
2023-06-17 5:57 ` Mike Rapoport
2023-06-17 5:57 ` Mike Rapoport
2023-06-17 20:38 ` Andy Lutomirski
2023-06-17 20:38 ` Andy Lutomirski
2023-06-17 20:38 ` Andy Lutomirski
2023-06-17 20:38 ` Andy Lutomirski
2023-06-18 8:00 ` Mike Rapoport
2023-06-18 8:00 ` Mike Rapoport
2023-06-18 8:00 ` Mike Rapoport
2023-06-18 8:00 ` Mike Rapoport
2023-06-19 17:09 ` Andy Lutomirski
2023-06-19 17:09 ` Andy Lutomirski
2023-06-19 17:09 ` Andy Lutomirski
2023-06-19 17:09 ` Andy Lutomirski
2023-06-19 20:18 ` Nadav Amit
2023-06-19 20:18 ` Nadav Amit
2023-06-19 20:18 ` Nadav Amit
2023-06-19 20:18 ` Nadav Amit
2023-06-20 17:24 ` Andy Lutomirski
2023-06-20 17:24 ` Andy Lutomirski
2023-06-20 17:24 ` Andy Lutomirski
2023-06-20 17:24 ` Andy Lutomirski
2023-06-25 16:14 ` Mike Rapoport
2023-06-25 16:14 ` Mike Rapoport
2023-06-25 16:14 ` Mike Rapoport
2023-06-25 16:14 ` Mike Rapoport
2023-06-25 16:59 ` Andy Lutomirski
2023-06-25 16:59 ` Andy Lutomirski
2023-06-25 16:59 ` Andy Lutomirski
2023-06-25 16:59 ` Andy Lutomirski
2023-06-25 17:42 ` Mike Rapoport
2023-06-25 17:42 ` Mike Rapoport
2023-06-25 17:42 ` Mike Rapoport
2023-06-25 17:42 ` Mike Rapoport
2023-06-25 18:07 ` Kent Overstreet
2023-06-25 18:07 ` Kent Overstreet
2023-06-25 18:07 ` Kent Overstreet
2023-06-25 18:07 ` Kent Overstreet
2023-06-26 6:13 ` Song Liu
2023-06-26 6:13 ` Song Liu
2023-06-26 6:13 ` Song Liu
2023-06-26 6:13 ` Song Liu
2023-06-26 9:54 ` Puranjay Mohan
2023-06-26 9:54 ` Puranjay Mohan
2023-06-26 9:54 ` Puranjay Mohan
2023-06-26 9:54 ` Puranjay Mohan
2023-06-26 12:23 ` Mark Rutland
2023-06-26 12:23 ` Mark Rutland
2023-06-26 12:23 ` Mark Rutland
2023-06-26 12:23 ` Mark Rutland
2023-06-26 12:31 ` Mark Rutland
2023-06-26 12:31 ` Mark Rutland
2023-06-26 12:31 ` Mark Rutland
2023-06-26 12:31 ` Mark Rutland
2023-06-26 17:48 ` Song Liu
2023-06-26 17:48 ` Song Liu
2023-06-26 17:48 ` Song Liu
2023-06-26 17:48 ` Song Liu
2023-07-17 17:23 ` Andy Lutomirski
2023-07-17 17:23 ` Andy Lutomirski
2023-07-17 17:23 ` Andy Lutomirski
2023-07-17 17:23 ` Andy Lutomirski
2023-06-26 13:01 ` Mark Rutland
2023-06-26 13:01 ` Mark Rutland
2023-06-26 13:01 ` Mark Rutland
2023-06-26 13:01 ` Mark Rutland
2023-06-19 11:34 ` Kent Overstreet
2023-06-19 11:34 ` Kent Overstreet
2023-06-19 11:34 ` Kent Overstreet
2023-06-19 11:34 ` Kent Overstreet
2023-06-16 8:50 ` [PATCH v2 03/12] mm/execmem, arch: convert simple overrides of module_alloc to execmem Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 18:36 ` Song Liu
2023-06-16 18:36 ` Song Liu
2023-06-16 18:36 ` Song Liu
2023-06-16 18:36 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 04/12] mm/execmem, arch: convert remaining " Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 16:16 ` Edgecombe, Rick P
2023-06-16 16:16 ` Edgecombe, Rick P
2023-06-16 16:16 ` Edgecombe, Rick P
2023-06-16 16:16 ` Edgecombe, Rick P
2023-06-17 6:10 ` Mike Rapoport
2023-06-17 6:10 ` Mike Rapoport
2023-06-17 6:10 ` Mike Rapoport
2023-06-17 6:10 ` Mike Rapoport
2023-06-16 18:53 ` Song Liu
2023-06-16 18:53 ` Song Liu
2023-06-16 18:53 ` Song Liu
2023-06-16 18:53 ` Song Liu
2023-06-17 6:14 ` Mike Rapoport [this message]
2023-06-17 6:14 ` Mike Rapoport
2023-06-17 6:14 ` Mike Rapoport
2023-06-17 6:14 ` Mike Rapoport
2023-06-16 8:50 ` [PATCH v2 05/12] modules, execmem: drop module_alloc Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 18:56 ` Song Liu
2023-06-16 18:56 ` Song Liu
2023-06-16 18:56 ` Song Liu
2023-06-16 18:56 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 06/12] mm/execmem: introduce execmem_data_alloc() Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 16:55 ` Edgecombe, Rick P
2023-06-16 16:55 ` Edgecombe, Rick P
2023-06-16 16:55 ` Edgecombe, Rick P
2023-06-16 16:55 ` Edgecombe, Rick P
2023-06-17 6:44 ` Mike Rapoport
2023-06-17 6:44 ` Mike Rapoport
2023-06-17 6:44 ` Mike Rapoport
2023-06-17 6:44 ` Mike Rapoport
2023-06-16 20:01 ` Song Liu
2023-06-16 20:01 ` Song Liu
2023-06-16 20:01 ` Song Liu
2023-06-16 20:01 ` Song Liu
2023-06-17 6:51 ` Mike Rapoport
2023-06-17 6:51 ` Mike Rapoport
2023-06-17 6:51 ` Mike Rapoport
2023-06-17 6:51 ` Mike Rapoport
2023-06-18 22:32 ` Thomas Gleixner
2023-06-18 22:32 ` Thomas Gleixner
2023-06-18 22:32 ` Thomas Gleixner
2023-06-18 22:32 ` Thomas Gleixner
2023-06-18 23:14 ` Kent Overstreet
2023-06-18 23:14 ` Kent Overstreet
2023-06-18 23:14 ` Kent Overstreet
2023-06-18 23:14 ` Kent Overstreet
2023-06-19 0:43 ` Thomas Gleixner
2023-06-19 0:43 ` Thomas Gleixner
2023-06-19 0:43 ` Thomas Gleixner
2023-06-19 0:43 ` Thomas Gleixner
2023-06-19 2:12 ` Kent Overstreet
2023-06-19 2:12 ` Kent Overstreet
2023-06-19 2:12 ` Kent Overstreet
2023-06-19 2:12 ` Kent Overstreet
2023-06-20 14:51 ` Steven Rostedt
2023-06-20 14:51 ` Steven Rostedt
2023-06-20 14:51 ` Steven Rostedt
2023-06-20 14:51 ` Steven Rostedt
2023-06-20 15:32 ` Alexei Starovoitov
2023-06-20 15:32 ` Alexei Starovoitov
2023-06-20 15:32 ` Alexei Starovoitov
2023-06-20 15:32 ` Alexei Starovoitov
2023-06-19 15:23 ` Mike Rapoport
2023-06-19 15:23 ` Mike Rapoport
2023-06-19 15:23 ` Mike Rapoport
2023-06-19 15:23 ` Mike Rapoport
2023-06-16 8:50 ` [PATCH v2 07/12] arm64, execmem: extend execmem_params for generated code definitions Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 20:05 ` Song Liu
2023-06-16 20:05 ` Song Liu
2023-06-16 20:05 ` Song Liu
2023-06-16 20:05 ` Song Liu
2023-06-17 6:57 ` Mike Rapoport
2023-06-17 6:57 ` Mike Rapoport
2023-06-17 6:57 ` Mike Rapoport
2023-06-17 6:57 ` Mike Rapoport
2023-06-17 15:36 ` Kent Overstreet
2023-06-17 15:36 ` Kent Overstreet
2023-06-17 15:36 ` Kent Overstreet
2023-06-17 15:36 ` Kent Overstreet
2023-06-17 16:38 ` Song Liu
2023-06-17 16:38 ` Song Liu
2023-06-17 16:38 ` Song Liu
2023-06-17 16:38 ` Song Liu
2023-06-17 20:37 ` Kent Overstreet
2023-06-17 20:37 ` Kent Overstreet
2023-06-17 20:37 ` Kent Overstreet
2023-06-17 20:37 ` Kent Overstreet
2023-06-16 8:50 ` [PATCH v2 08/12] riscv: extend execmem_params for kprobes allocations Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 20:09 ` Song Liu
2023-06-16 20:09 ` Song Liu
2023-06-16 20:09 ` Song Liu
2023-06-16 20:09 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 09/12] powerpc: " Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 20:09 ` Song Liu
2023-06-16 20:09 ` Song Liu
2023-06-16 20:09 ` Song Liu
2023-06-16 20:09 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 10/12] arch: make execmem setup available regardless of CONFIG_MODULES Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 20:17 ` Song Liu
2023-06-16 20:17 ` Song Liu
2023-06-16 20:17 ` Song Liu
2023-06-16 20:17 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 11/12] x86/ftrace: enable dynamic ftrace without CONFIG_MODULES Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 20:18 ` Song Liu
2023-06-16 20:18 ` Song Liu
2023-06-16 20:18 ` Song Liu
2023-06-16 20:18 ` Song Liu
2023-06-16 8:50 ` [PATCH v2 12/12] kprobes: remove dependcy on CONFIG_MODULES Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 8:50 ` Mike Rapoport
2023-06-16 11:44 ` Björn Töpel
2023-06-16 11:44 ` Björn Töpel
2023-06-16 11:44 ` Björn Töpel
2023-06-16 11:44 ` Björn Töpel
2023-06-17 6:52 ` Mike Rapoport
2023-06-17 6:52 ` Mike Rapoport
2023-06-17 6:52 ` Mike Rapoport
2023-06-17 6:52 ` Mike Rapoport
2023-06-16 17:02 ` [PATCH v2 00/12] mm: jit/text allocator Edgecombe, Rick P
2023-06-16 17:02 ` Edgecombe, Rick P
2023-06-16 17:02 ` Edgecombe, Rick P
2023-06-16 17:02 ` Edgecombe, Rick P
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230617061444.GP52412@kernel.org \
--to=rppt@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=bpf@vger.kernel.org \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=davem@davemloft.net \
--cc=deller@gmx.de \
--cc=dinguyen@kernel.org \
--cc=hca@linux.ibm.com \
--cc=kent.overstreet@linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-modules@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=mcgrof@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=nadav.amit@gmail.com \
--cc=naveen.n.rao@linux.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=palmer@dabbelt.com \
--cc=puranjay12@gmail.com \
--cc=rick.p.edgecombe@intel.com \
--cc=rostedt@goodmis.org \
--cc=song@kernel.org \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tsbogend@alpha.franken.de \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.