FAILED: patch "[PATCH] powerpc/ftrace: Ignore ftrace locations in exit text sections" failed to apply to 6.6-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x ea73179e64131bcd29ba6defd33732abdf8ca14b
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024021902-authentic-handpick-da09@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
ea73179e6413 ("powerpc/ftrace: Ignore ftrace locations in exit text sections") 2ec36570c358 ("powerpc/ftrace: Fix indentation in ftrace.h")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ea73179e64131bcd29ba6defd33732abdf8ca14b Mon Sep 17 00:00:00 2001
From: Naveen N Rao <[email protected]>
Date: Tue, 13 Feb 2024 23:24:10 +0530
Subject: [PATCH] powerpc/ftrace: Ignore ftrace locations in exit text sections
Michael reported that we are seeing an ftrace bug on bootup when KASAN is enabled and we are using -fpatchable-function-entry:
ftrace: allocating 47780 entries in 18 pages
ftrace-powerpc: 0xc0000000020b3d5c: No module provided for non-kernel address ------------[ ftrace bug ]------------
ftrace faulted on modifying
[<c0000000020b3d5c>] 0xc0000000020b3d5c
Initializing ftrace call sites
ftrace record flags: 0
(0)
expected tramp: c00000000008cef4
------------[ cut here ]------------ WARNING: CPU: 0 PID: 0 at kernel/trace/ftrace.c:2180 ftrace_bug+0x3c0/0x424 Modules linked in: CPU: 0 PID: 0 Comm: swapper Not tainted 6.5.0-rc3-00120-g0f71dcfb4aef #860 Hardware name: IBM pSeries (emulated by qemu) POWER9 (raw) 0x4e1202 0xf000005 of:SLOF,HEAD hv:linux,kvm pSeries NIP: c0000000003aa81c LR: c0000000003aa818 CTR: 0000000000000000 REGS: c0000000033cfab0 TRAP: 0700 Not tainted (6.5.0-rc3-00120-g0f71dcfb4aef) MSR: 8000000002021033 <SF,VEC,ME,IR,DR,RI,LE> CR: 28028240 XER: 00000000 CFAR: c0000000002781a8 IRQMASK: 3 ... NIP [c0000000003aa81c] ftrace_bug+0x3c0/0x424 LR [c0000000003aa818] ftrace_bug+0x3bc/0x424 Call Trace: ftrace_bug+0x3bc/0x424 (unreliable) ftrace_process_locs+0x5f4/0x8a0 ftrace_init+0xc0/0x1d0 start_kernel+0x1d8/0x484
With CONFIG_FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY=y and CONFIG_KASAN=y, compiler emits nops in functions that it generates for registering and unregistering global variables (unlike with -pg and -mprofile-kernel where calls to _mcount() are not generated in those functions). Those functions then end up in INIT_TEXT and EXIT_TEXT respectively. We don't expect to see any profiled functions in EXIT_TEXT, so ftrace_init_nop() assumes that all addresses that aren't in the core kernel text belongs to a module. Since these functions do not match that criteria, we see the above bug.
Address this by having ftrace ignore all locations in the text exit sections of vmlinux.
arch/powerpc/include/asm/ftrace.h +2 -8
@@ -20,14 +20,6 @@#ifndef __ASSEMBLY__extern void _mcount (void ); -static inline unsigned long ftrace_call_adjust (unsigned long addr) -{ -if (IS_ENABLED (CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY )) - addr +=MCOUNT_INSN_SIZE ; - -return addr; -} -unsigned long prepare_ftrace_return (unsigned long parent,unsigned long ip,unsigned long sp);
@@ -142,8 +134,10 @@ static inline u8 this_cpu_get_ftrace_enabled(void) { return 1; }#ifdef CONFIG_FUNCTION_TRACER extern unsigned int ftrace_tramp_text[], ftrace_tramp_init[];void ftrace_free_init_tramp (void ); +unsigned long ftrace_call_adjust (unsigned long addr);#else static inline void ftrace_free_init_tramp (void ) { } +static inline unsigned long ftrace_call_adjust (unsigned long addr) {return addr; }#endif #endif /* !__ASSEMBLY__ */
arch/powerpc/include/asm/sections.h +1 -0
@@ -14,6 +14,7 @@ typedef struct func_desc func_desc_t;extern char __head_end[];extern char __srwx_boundary[]; +extern char __exittext_begin[], __exittext_end[];/* Patch sites */ extern s32 patch__call_flush_branch_caches1;
arch/powerpc/kernel/trace/ftrace.c +12 -0
@@ -27,10 +27,22 @@#include <asm/ftrace.h> #include <asm/syscall.h> #include <asm/inst.h> +#include <asm/sections.h> #define NUM_FTRACE_TRAMPS 2static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS ]; +unsigned long ftrace_call_adjust (unsigned long addr) +{ +if (addr >= (unsigned long )__exittext_begin && addr < (unsigned long )__exittext_end) +return 0 ; + +if (IS_ENABLED (CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY )) + addr +=MCOUNT_INSN_SIZE ; + +return addr; +} +static ppc_inst_t ftrace_create_branch_inst (unsigned long ip,unsigned long addr,int link) {ppc_inst_t op;
arch/powerpc/kernel/trace/ftrace_64_pg.c +5 -0
@@ -37,6 +37,11 @@#define NUM_FTRACE_TRAMPS 8static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS ]; +unsigned long ftrace_call_adjust (unsigned long addr) +{ +return addr; +} +static ppc_inst_t ftrace_call_replace (unsigned long ip,unsigned long addr,int link) {
arch/powerpc/kernel/vmlinux.lds.S +2 -0
@@ -281,7 +281,9 @@ SECTIONS * to deal with references from __bug_table */ .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { + __exittext_begin = .; EXIT_TEXT + __exittext_end = .; } . = ALIGN(PAGE_SIZE);
PATCH 1/1 powerpc/ftrace: Ignore ftrace locations in exit text sections
commit ea73179e64131bcd29ba6defd33732abdf8ca14b upstream.
Michael reported that we are seeing an ftrace bug on bootup when KASAN is enabled and we are using -fpatchable-function-entry:
ftrace: allocating 47780 entries in 18 pages
ftrace-powerpc: 0xc0000000020b3d5c: No module provided for non-kernel address ------------[ ftrace bug ]------------
ftrace faulted on modifying
[<c0000000020b3d5c>] 0xc0000000020b3d5c
Initializing ftrace call sites
ftrace record flags: 0
(0)
expected tramp: c00000000008cef4
------------[ cut here ]------------ WARNING: CPU: 0 PID: 0 at kernel/trace/ftrace.c:2180 ftrace_bug+0x3c0/0x424 Modules linked in: CPU: 0 PID: 0 Comm: swapper Not tainted 6.5.0-rc3-00120-g0f71dcfb4aef #860 Hardware name: IBM pSeries (emulated by qemu) POWER9 (raw) 0x4e1202 0xf000005 of:SLOF,HEAD hv:linux,kvm pSeries NIP: c0000000003aa81c LR: c0000000003aa818 CTR: 0000000000000000 REGS: c0000000033cfab0 TRAP: 0700 Not tainted (6.5.0-rc3-00120-g0f71dcfb4aef) MSR: 8000000002021033 <SF,VEC,ME,IR,DR,RI,LE> CR: 28028240 XER: 00000000 CFAR: c0000000002781a8 IRQMASK: 3 ... NIP [c0000000003aa81c] ftrace_bug+0x3c0/0x424 LR [c0000000003aa818] ftrace_bug+0x3bc/0x424 Call Trace: ftrace_bug+0x3bc/0x424 (unreliable) ftrace_process_locs+0x5f4/0x8a0 ftrace_init+0xc0/0x1d0 start_kernel+0x1d8/0x484
With CONFIG_FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY=y and CONFIG_KASAN=y, compiler emits nops in functions that it generates for registering and unregistering global variables (unlike with -pg and -mprofile-kernel where calls to _mcount() are not generated in those functions). Those functions then end up in INIT_TEXT and EXIT_TEXT respectively. We don't expect to see any profiled functions in EXIT_TEXT, so ftrace_init_nop() assumes that all addresses that aren't in the core kernel text belongs to a module. Since these functions do not match that criteria, we see the above bug.
Address this by having ftrace ignore all locations in the text exit sections of vmlinux.
--- arch/powerpc/include/asm/ftrace.h | 10 ++-------- arch/powerpc/include/asm/sections.h | 1 + arch/powerpc/kernel/trace/ftrace.c | 12 ++++++++++++ arch/powerpc/kernel/trace/ftrace_64_pg.c | 5 +++++ arch/powerpc/kernel/vmlinux.lds.S | 2 ++ 5 files changed, 22 insertions(+), 8 deletions(-)
arch/powerpc/include/asm/ftrace.h +2 -8
@@ -20,14 +20,6 @@#ifndef __ASSEMBLY__extern void _mcount (void ); -static inline unsigned long ftrace_call_adjust (unsigned long addr) -{ -if (IS_ENABLED (CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY )) - addr +=MCOUNT_INSN_SIZE ; - -return addr; -} -unsigned long prepare_ftrace_return (unsigned long parent,unsigned long ip,unsigned long sp);
@@ -142,8 +134,10 @@ static inline u8 this_cpu_get_ftrace_enabled(void) { return 1; }#ifdef CONFIG_FUNCTION_TRACER extern unsigned int ftrace_tramp_text[], ftrace_tramp_init[];void ftrace_free_init_tramp (void ); +unsigned long ftrace_call_adjust (unsigned long addr);#else static inline void ftrace_free_init_tramp (void ) { } +static inline unsigned long ftrace_call_adjust (unsigned long addr) {return addr; }#endif #endif /* !__ASSEMBLY__ */
arch/powerpc/include/asm/sections.h +1 -0
@@ -14,6 +14,7 @@ typedef struct func_desc func_desc_t;extern char __head_end[];extern char __srwx_boundary[]; +extern char __exittext_begin[], __exittext_end[];/* Patch sites */ extern s32 patch__call_flush_branch_caches1;
arch/powerpc/kernel/trace/ftrace.c +12 -0
@@ -27,10 +27,22 @@#include <asm/ftrace.h> #include <asm/syscall.h> #include <asm/inst.h> +#include <asm/sections.h> #define NUM_FTRACE_TRAMPS 2static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS ]; +unsigned long ftrace_call_adjust (unsigned long addr) +{ +if (addr >= (unsigned long )__exittext_begin && addr < (unsigned long )__exittext_end) +return 0 ; + +if (IS_ENABLED (CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY )) + addr +=MCOUNT_INSN_SIZE ; + +return addr; +} +static ppc_inst_t ftrace_create_branch_inst (unsigned long ip,unsigned long addr,int link) {ppc_inst_t op;
arch/powerpc/kernel/trace/ftrace_64_pg.c +5 -0
@@ -37,6 +37,11 @@#define NUM_FTRACE_TRAMPS 8static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS ]; +unsigned long ftrace_call_adjust (unsigned long addr) +{ +return addr; +} +static ppc_inst_t ftrace_call_replace (unsigned long ip,unsigned long addr,int link) {
arch/powerpc/kernel/vmlinux.lds.S +2 -0
@@ -281,7 +281,9 @@ SECTIONS * to deal with references from __bug_table */ .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { + __exittext_begin = .; EXIT_TEXT + __exittext_end = .; } . = ALIGN(PAGE_SIZE);
base-commit: ba151416051a45ffca565f708584b9cd5c971481
Signature · 1 line
2.44.0
Greg KH
maintainerRe: [PATCH 6.6.y] powerpc/ftrace: Ignore ftrace locations in exit text sections
Quoted 2 lines · Naveen N Rao
commit
ea73179e64131bcd29ba6defd33732abdf8ca14bupstream.
Now queued up, thanks.
greg k-h