All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: linux-kernel@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>
Cc: Eddy Wu <Eddy_Wu@trendmicro.com>,
	x86@kernel.org, "David S . Miller" <davem@davemloft.net>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ingo Molnar <mingo@redhat.com>,
	"Naveen N . Rao" <naveen.n.rao@linux.ibm.com>,
	Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
	linux-arch@vger.kernel.org
Subject: [PATCH v2 13/15] sparc: kprobes: Use generic kretprobe trampoline handler
Date: Thu, 27 Aug 2020 20:37:27 +0900	[thread overview]
Message-ID: <159852824765.707944.7096050901054917870.stgit@devnote2> (raw)
In-Reply-To: <159852811819.707944.12798182250041968537.stgit@devnote2>

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 arch/sparc/kernel/kprobes.c |   52 +++----------------------------------------
 1 file changed, 4 insertions(+), 48 deletions(-)

diff --git a/arch/sparc/kernel/kprobes.c b/arch/sparc/kernel/kprobes.c
index dfbca2470536..cd34aeaa3ebb 100644
--- a/arch/sparc/kernel/kprobes.c
+++ b/arch/sparc/kernel/kprobes.c
@@ -453,6 +453,7 @@ void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
 				      struct pt_regs *regs)
 {
 	ri->ret_addr = (kprobe_opcode_t *)(regs->u_regs[UREG_RETPC] + 8);
+	ri->fp = NULL;
 
 	/* Replace the return addr with trampoline addr */
 	regs->u_regs[UREG_RETPC] =
@@ -465,58 +466,13 @@ void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
 static int __kprobes trampoline_probe_handler(struct kprobe *p,
 					      struct pt_regs *regs)
 {
-	struct kretprobe_instance *ri = NULL;
-	struct hlist_head *head, empty_rp;
-	struct hlist_node *tmp;
-	unsigned long flags, orig_ret_address = 0;
-	unsigned long trampoline_address =(unsigned long)&kretprobe_trampoline;
+	unsigned long orig_ret_address = 0;
 
-	INIT_HLIST_HEAD(&empty_rp);
-	kretprobe_hash_lock(current, &head, &flags);
-
-	/*
-	 * It is possible to have multiple instances associated with a given
-	 * task either because an multiple functions in the call path
-	 * have a return probe installed on them, and/or more than one return
-	 * return probe was registered for a target function.
-	 *
-	 * We can handle this because:
-	 *     - instances are always inserted at the head of the list
-	 *     - when multiple return probes are registered for the same
-	 *       function, the first instance's ret_addr will point to the
-	 *       real return address, and all the rest will point to
-	 *       kretprobe_trampoline
-	 */
-	hlist_for_each_entry_safe(ri, tmp, head, hlist) {
-		if (ri->task != current)
-			/* another task is sharing our hash bucket */
-			continue;
-
-		if (ri->rp && ri->rp->handler)
-			ri->rp->handler(ri, regs);
-
-		orig_ret_address = (unsigned long)ri->ret_addr;
-		recycle_rp_inst(ri, &empty_rp);
-
-		if (orig_ret_address != trampoline_address)
-			/*
-			 * This is the real return address. Any other
-			 * instances associated with this task are for
-			 * other calls deeper on the call stack
-			 */
-			break;
-	}
-
-	kretprobe_assert(ri, orig_ret_address, trampoline_address);
+	orig_ret_address = __kretprobe_trampoline_handler(regs,
+			(unsigned long)&kretprobe_trampoline, NULL);
 	regs->tpc = orig_ret_address;
 	regs->tnpc = orig_ret_address + 4;
 
-	kretprobe_hash_unlock(current, &flags);
-
-	hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
-		hlist_del(&ri->hlist);
-		kfree(ri);
-	}
 	/*
 	 * By returning a non-zero value, we are telling
 	 * kprobe_handler() that we don't want the post_handler


  parent reply	other threads:[~2020-08-27 15:16 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-27 11:35 [PATCH v2 00/15] kprobes: Unify kretprobe trampoline handlers Masami Hiramatsu
2020-08-27 11:35 ` [PATCH v2 01/15] kprobes: Add generic kretprobe trampoline handler Masami Hiramatsu
2020-08-27 11:35 ` [PATCH v2 02/15] x86/kprobes: Use " Masami Hiramatsu
2020-08-27 11:35 ` [PATCH v2 03/15] arm: kprobes: " Masami Hiramatsu
2020-08-27 11:35 ` [PATCH v2 04/15] arm64: " Masami Hiramatsu
2020-08-27 11:36 ` [PATCH v2 05/15] arc: " Masami Hiramatsu
2020-08-27 11:36 ` [PATCH v2 06/15] csky: " Masami Hiramatsu
2020-08-27 11:36 ` [PATCH v2 07/15] ia64: " Masami Hiramatsu
2020-08-27 11:36 ` [PATCH v2 08/15] mips: " Masami Hiramatsu
2020-08-27 11:36 ` [PATCH v2 09/15] parisc: " Masami Hiramatsu
2020-08-27 11:36 ` [PATCH v2 10/15] powerpc: " Masami Hiramatsu
2020-08-27 11:37 ` [PATCH v2 11/15] s390: " Masami Hiramatsu
2020-08-27 11:37 ` [PATCH v2 12/15] sh: " Masami Hiramatsu
2020-08-27 11:37 ` Masami Hiramatsu [this message]
2020-08-27 11:37 ` [PATCH v2 14/15] kprobes: Remove NMI context check Masami Hiramatsu
2020-08-27 11:37 ` [PATCH v2 15/15] kprobes: Free kretprobe_instance with rcu callback Masami Hiramatsu
2020-08-27 11:48   ` peterz
2020-08-27 11:50     ` Masami Hiramatsu
2020-08-27 11:49   ` peterz
2020-08-27 13:02     ` Masami Hiramatsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=159852824765.707944.7096050901054917870.stgit@devnote2 \
    --to=mhiramat@kernel.org \
    --cc=Eddy_Wu@trendmicro.com \
    --cc=anil.s.keshavamurthy@intel.com \
    --cc=davem@davemloft.net \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=naveen.n.rao@linux.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.