From: Ilya Leoshkevich Date: Wed, 30 Oct 2019 13:20:32 +0000 (+0100) Subject: s390: add error handling to perf_callchain_kernel X-Git-Tag: v5.15~5106^2~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=effb83ccc83a97dbbe5214f4c443522719f05f3a;p=platform%2Fkernel%2Flinux-starfive.git s390: add error handling to perf_callchain_kernel perf_callchain_kernel stops neither when it encounters a garbage address, nor when it runs out of space. Fix both issues using x86 version as an inspiration. Signed-off-by: Ilya Leoshkevich Signed-off-by: Vasily Gorbik --- diff --git a/arch/s390/kernel/perf_event.c b/arch/s390/kernel/perf_event.c index fcb6c2e..1e75cc9 100644 --- a/arch/s390/kernel/perf_event.c +++ b/arch/s390/kernel/perf_event.c @@ -224,9 +224,13 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs) { struct unwind_state state; + unsigned long addr; - unwind_for_each_frame(&state, current, regs, 0) - perf_callchain_store(entry, state.ip); + unwind_for_each_frame(&state, current, regs, 0) { + addr = unwind_get_return_address(&state); + if (!addr || perf_callchain_store(entry, addr)) + return; + } } /* Perf definitions for PMU event attributes in sysfs */