Commit 5d79c2be authored by Mike Rapoport (Microsoft)'s avatar Mike Rapoport (Microsoft) Committed by Andrew Morton
Browse files

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: default avatarMike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: default avatarSteven 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: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 36de1e42
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -263,7 +263,7 @@ void arch_ftrace_update_code(int command)

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)
{
+8 −1
Original line number Diff line number Diff line
@@ -1105,7 +1105,14 @@ struct execmem_info __init *execmem_arch_setup(void)
				.pgprot	= PAGE_KERNEL_ROX,
				.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,
				.start	= start,
				.end	= MODULES_END,