Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757243AbbGGM6v (ORCPT ); Tue, 7 Jul 2015 08:58:51 -0400 Received: from mail-wi0-f171.google.com ([209.85.212.171]:34757 "EHLO mail-wi0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756670AbbGGM6e (ORCPT ); Tue, 7 Jul 2015 08:58:34 -0400 Date: Tue, 7 Jul 2015 14:58:28 +0200 From: Anton Arapov To: Oleg Nesterov Cc: Ananth Mavinakayanahalli , David Long , Denys Vlasenko , "Frank Ch. Eigler" , Ingo Molnar , Jan Willeke , Jim Keniston , Mark Wielaard , Pratyush Anand , Srikar Dronamraju , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 06/11] uprobes: Export struct return_instance, introduce arch_uretprobe_is_alive() Message-ID: <20150707125828.GF5946@troglodyte.intinfra.com> References: <20150707012210.GA7466@redhat.com> <20150707012254.GA7526@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150707012254.GA7526@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3282 Lines: 85 On Tue, Jul 07, 2015 at 03:22:54AM +0200, Oleg Nesterov wrote: > Add the new "weak" helper, arch_uretprobe_is_alive(), used by the next > patches. It should return true if this return_instance is still valid. > The arch agnostic version just always returns true. > > The patch exports "struct return_instance" for the architectures which > want to override this hook. We can also cleanup prepare_uretprobe() if > we pass the new return_instance to arch_uretprobe_hijack_return_addr(). > > Signed-off-by: Oleg Nesterov Acked-by: Anton Arapov > --- > include/linux/uprobes.h | 10 ++++++++++ > kernel/events/uprobes.c | 14 +++++--------- > 2 files changed, 15 insertions(+), 9 deletions(-) > > diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h > index 60beb5d..50d2764 100644 > --- a/include/linux/uprobes.h > +++ b/include/linux/uprobes.h > @@ -92,6 +92,15 @@ struct uprobe_task { > unsigned int depth; > }; > > +struct return_instance { > + struct uprobe *uprobe; > + unsigned long func; > + unsigned long orig_ret_vaddr; /* original return address */ > + bool chained; /* true, if instance is nested */ > + > + struct return_instance *next; /* keep as stack */ > +}; > + > struct xol_area; > > struct uprobes_state { > @@ -128,6 +137,7 @@ extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk); > extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data); > extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs); > extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs); > +extern bool arch_uretprobe_is_alive(struct return_instance *ret, struct pt_regs *regs); > extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs); > extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, > void *src, unsigned long len); > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index 98e4d97..1c71b62 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -86,15 +86,6 @@ struct uprobe { > struct arch_uprobe arch; > }; > > -struct return_instance { > - struct uprobe *uprobe; > - unsigned long func; > - unsigned long orig_ret_vaddr; /* original return address */ > - bool chained; /* true, if instance is nested */ > - > - struct return_instance *next; /* keep as stack */ > -}; > - > /* > * Execute out of line area: anonymous executable mapping installed > * by the probed task to execute the copy of the original instruction > @@ -1818,6 +1809,11 @@ bool __weak arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs) > return false; > } > > +bool __weak arch_uretprobe_is_alive(struct return_instance *ret, struct pt_regs *regs) > +{ > + return true; > +} > + > /* > * Run handler and ask thread to singlestep. > * Ensure all non-fatal signals cannot interrupt thread while it singlesteps. > -- > 1.5.5.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/