From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754847Ab1JSV6z (ORCPT ); Wed, 19 Oct 2011 17:58:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49681 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754165Ab1JSV6y (ORCPT ); Wed, 19 Oct 2011 17:58:54 -0400 Date: Wed, 19 Oct 2011 23:53:26 +0200 From: Oleg Nesterov To: Srikar Dronamraju Cc: Peter Zijlstra , Ingo Molnar , Steven Rostedt , Linux-mm , Arnaldo Carvalho de Melo , Linus Torvalds , Jonathan Corbet , Masami Hiramatsu , Hugh Dickins , Christoph Hellwig , Ananth N Mavinakayanahalli , Thomas Gleixner , Andi Kleen , Andrew Morton , Jim Keniston , Roland McGrath , LKML Subject: [PATCH 12/X] uprobes: x86: introduce abort_xol() Message-ID: <20111019215326.GF16395@redhat.com> References: <20110920115938.25326.93059.sendpatchset@srdronam.in.ibm.com> <20111015190007.GA30243@redhat.com> <20111019215139.GA16395@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111019215139.GA16395@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A separate "patch", just to emphasize that I do not know what actually abort_xol() should do! I do not understand this asm magic. This patch simply changes regs->ip back to the probed insn, obviously this is not enough to handle UPROBES_FIX_*. Please take care. If it is not clear, abort_xol() is needed when we should re-execute the original insn (replaced with int3), see the next patch. --- arch/x86/include/asm/uprobes.h | 1 + arch/x86/kernel/uprobes.c | 9 +++++++++ 2 files changed, 10 insertions(+), 0 deletions(-) diff --git a/arch/x86/include/asm/uprobes.h b/arch/x86/include/asm/uprobes.h index f0fbdab..6209da1 100644 --- a/arch/x86/include/asm/uprobes.h +++ b/arch/x86/include/asm/uprobes.h @@ -51,6 +51,7 @@ extern void set_instruction_pointer(struct pt_regs *regs, unsigned long vaddr); extern int pre_xol(struct uprobe *uprobe, struct pt_regs *regs); extern int post_xol(struct uprobe *uprobe, struct pt_regs *regs); extern bool xol_was_trapped(struct task_struct *tsk); +extern void abort_xol(struct pt_regs *regs); extern int uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data); #endif /* _ASM_UPROBES_H */ diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c index c861c27..bc11a89 100644 --- a/arch/x86/kernel/uprobes.c +++ b/arch/x86/kernel/uprobes.c @@ -511,6 +511,15 @@ bool xol_was_trapped(struct task_struct *tsk) return false; } +void abort_xol(struct pt_regs *regs) +{ + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // !!! Dear Srikar and Ananth, please implement me !!! + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + struct uprobe_task *utask = current->utask; + regs->ip = utask->vaddr; +} + /* * Called after single-stepping. To avoid the SMP problems that can * occur when we temporarily put back the original opcode to -- 1.5.5.1