Skip to contentSkip to conversation

Patch "powerpc/kprobes: Pause function_graph tracing during jprobes handling" has been added to the 4.11-stable tree

PATCH [email protected] 1 participant 1 message Jun 26, 2017

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

powerpc/kprobes: Pause function_graph tracing during jprobes handling

to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
powerpc-kprobes-pause-function_graph-tracing-during-jprobes-handling.patch
and it can be found in the queue-4.11 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From a9f8553e935f26cb5447f67e280946b0923cd2dc Mon Sep 17 00:00:00 2001

From: "Naveen N. Rao" <[email protected]>
Date: Thu, 1 Jun 2017 16:18:15 +0530
Subject: powerpc/kprobes: Pause function_graph tracing during jprobes handling

From: Naveen N. Rao <[email protected]>

commit a9f8553e935f26cb5447f67e280946b0923cd2dc upstream.

This fixes a crash when function_graph and jprobes are used together. This is essentially commit 237d28db036e ("ftrace/jprobes/x86: Fix conflict between jprobes and function graph tracing"), but for powerpc.

Jprobes breaks function_graph tracing since the jprobe hook needs to use jprobe_return(), which never returns back to the hook, but instead to the original jprobe'd function. The solution is to momentarily pause function_graph tracing before invoking the jprobe hook and re-enable it when returning back to the original jprobe'd function.

---
 arch/powerpc/kernel/kprobes.c |   11 +++++++++++
 1 file changed, 11 insertions(+)
arch/powerpc/kernel/kprobes.c +11 -0
@@ -495,6 +495,15 @@ int __kprobes setjmp_pre_handler(struct
 	regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc);
 #endif
 
+	/*
+	 * jprobes use jprobe_return() which skips the normal return
+	 * path of the function, and this messes up the accounting of the
+	 * function graph tracer.
+	 *
+	 * Pause function graph tracing while performing the jprobe function.
+	 */
+	pause_graph_tracing();
+
 	return 1;
 }
 
@@ -517,6 +526,8 @@ int __kprobes longjmp_break_handler(stru
 	 * saved regs...
 	 */
 	memcpy(regs, &kcb->jprobe_saved_regs, sizeof(struct pt_regs));
+	/* It's OK to start function graph tracing again */
+	unpause_graph_tracing();
 	preempt_enable_no_resched();
 	return 1;
 }

Patches currently in stable-queue which might be from [email protected] are

queue-4.11/powerpc-kprobes-pause-function_graph-tracing-during-jprobes-handling.patch queue-4.11/powerpc-64s-handle-data-breakpoints-in-radix-mode.patch queue-4.11/powerpc-perf-fix-oops-when-kthread-execs-user-process.patch