Re: [PATCH 2/2] x86/modules: Make x86 allocs to flush when free

From: Edgecombe, Rick P
Date: Wed Nov 28 2018 - 19:02:20 EST


On Wed, 2018-11-28 at 15:11 -0800, Andrew Morton wrote:
> On Tue, 27 Nov 2018 16:07:54 -0800 Rick Edgecombe <rick.p.edgecombe@xxxxxxxxx>
> wrote:
>
> > Change the module allocations to flush before freeing the pages.
> >
> > ...
> >
> > --- a/arch/x86/kernel/module.c
> > +++ b/arch/x86/kernel/module.c
> > @@ -87,8 +87,8 @@ void *module_alloc(unsigned long size)
> > p = __vmalloc_node_range(size, MODULE_ALIGN,
> > MODULES_VADDR + get_module_load_offset(),
> > MODULES_END, GFP_KERNEL,
> > - PAGE_KERNEL_EXEC, 0, NUMA_NO_NODE,
> > - __builtin_return_address(0));
> > + PAGE_KERNEL_EXEC, VM_IMMEDIATE_UNMAP,
> > + NUMA_NO_NODE, __builtin_return_address(0));
> > if (p && (kasan_module_alloc(p, size) < 0)) {
> > vfree(p);
> > return NULL;
>
> Should any other architectures do this?

I would think everything that has something like an NX bit and doesn't use the
default module_alloc implementation.

I could add the flag for every arch that defines PAGE_KERNEL_EXEC, but I don't
have a good way to test on all of those architectures.

Thanks,

Rick