[PATCH v2 2/9] ftrace: Let ftrace_call_adjust() reject a patch site
From: Jose Fernandez (Anthropic)
Date: Thu Sep 24 2026 - 18:38:21 EST
When ftrace_call_adjust() returns 0 for a patch site,
ftrace_process_locs() does not skip the site. The NULL test runs before
the adjustment since commit 6eeca746fa5f ("ftrace: Test mcount_loc
addr before calling ftrace_call_addr()"), so the 0 is stored as the
record's ip and ftrace_init_nop() later hits the BUG_ON() in arm64's
patch_map(). Test the adjusted address too and count the site as
skipped.
Reviewed-by: Ben Cressey <ben@xxxxxxxxxxx>
Reviewed-by: Florent Revest (Anthropic) <florent.revest@xxxxxxxxx>
Assisted-by: LLM
Signed-off-by: Jose Fernandez (Anthropic) <jose.fernandez@xxxxxxxxx>
---
kernel/trace/ftrace.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 2cc2d41353c10..fa541d3e8784a 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -7676,6 +7676,11 @@ static int ftrace_process_locs(struct module *mod,
}
addr = ftrace_call_adjust(addr);
+ /* The architecture may return 0 to reject a patch site */
+ if (!addr) {
+ skipped++;
+ continue;
+ }
end_offset = (pg->index+1) * sizeof(pg->records[0]);
if (end_offset > PAGE_SIZE << pg->order) {
--
2.52.0