On Thu, May 25, 2017 at 10:57:51AM +0200, Thomas Gleixner wrote: > ftrace use module_alloc() to allocate trampoline pages. The mapping of > module_alloc() is RWX, which makes sense as the memory is written to right > after allocation. But nothing makes these pages RO after writing to them. > > Add proper set_memory_rw/ro() calls to protect the trampolines after > modification. > > Signed-off-by: Thomas Gleixner <t...@linutronix.de> > --- > arch/x86/kernel/ftrace.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > --- a/arch/x86/kernel/ftrace.c > +++ b/arch/x86/kernel/ftrace.c > @@ -689,8 +689,12 @@ static inline void *alloc_tramp(unsigned > { > return module_alloc(size); > } > -static inline void tramp_free(void *tramp) > +static inline void tramp_free(void *tramp, int size) > { > + int npages = PAGE_ALIGN(size) >> PAGE_SHIFT; > + > + set_memory_nx((unsigned long)tramp, npages); > + set_memory_rw((unsigned long)tramp, npages); > module_memfree(tramp); > }
Can/should module_memfree() just do this for users? With Masami's fix that'd be 2 users already. Luis