x86/ftrace: enable EXECMEM_ROX_CACHE for ftrace allocations
For the most part ftrace uses text poking and can handle ROX memory. The only place that requires writable memory is create_trampoline() that updates the allocated memory and in the end makes it ROX. Use execmem_alloc_rw() in x86::ftrace::alloc_tramp() and enable ROX cache for EXECMEM_FTRACE when configuration and CPU features allow that. Link: https://lkml.kernel.org/r/20250713071730.4117334-9-rppt@kernel.org Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org> Cc: Daniel Gomez <da.gomez@samsung.com> Cc: Masami Hiramatsu (Google) <mhiramat@kernel.org> Cc: Petr Pavlu <petr.pavlu@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
36de1e4238
commit
5d79c2be50
|
@ -263,7 +263,7 @@ void arch_ftrace_update_code(int command)
|
||||||
|
|
||||||
static inline void *alloc_tramp(unsigned long size)
|
static inline void *alloc_tramp(unsigned long size)
|
||||||
{
|
{
|
||||||
return execmem_alloc(EXECMEM_FTRACE, size);
|
return execmem_alloc_rw(EXECMEM_FTRACE, size);
|
||||||
}
|
}
|
||||||
static inline void tramp_free(void *tramp)
|
static inline void tramp_free(void *tramp)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1105,7 +1105,14 @@ struct execmem_info __init *execmem_arch_setup(void)
|
||||||
.pgprot = PAGE_KERNEL_ROX,
|
.pgprot = PAGE_KERNEL_ROX,
|
||||||
.alignment = MODULE_ALIGN,
|
.alignment = MODULE_ALIGN,
|
||||||
},
|
},
|
||||||
[EXECMEM_FTRACE ... EXECMEM_BPF] = {
|
[EXECMEM_FTRACE] = {
|
||||||
|
.flags = flags,
|
||||||
|
.start = start,
|
||||||
|
.end = MODULES_END,
|
||||||
|
.pgprot = pgprot,
|
||||||
|
.alignment = MODULE_ALIGN,
|
||||||
|
},
|
||||||
|
[EXECMEM_BPF] = {
|
||||||
.flags = EXECMEM_KASAN_SHADOW,
|
.flags = EXECMEM_KASAN_SHADOW,
|
||||||
.start = start,
|
.start = start,
|
||||||
.end = MODULES_END,
|
.end = MODULES_END,
|
||||||
|
|
Loading…
Reference in New Issue