Message ID | 642e35e8c23dda3ef79cd751794cfe041d5c6270.1529501006.git.joseph.salisbury@canonical.com |
---|---|
State | New |
Headers | show |
Series | s390/uprobes: implement arch_uretprobe_is_alive() | expand |
On 06/22/18 18:31, Joseph Salisbury wrote: > From: Heiko Carstens <heiko.carstens@de.ibm.com> > > BugLink: http://bugs.launchpad.net/bugs/1777840 > > Implement s390 specific arch_uretprobe_is_alive() to avoid SIGSEGVs > observed with uretprobes in combination with setjmp/longjmp. > > See commit 2dea1d9c38e4 ("powerpc/uprobes: Implement > arch_uretprobe_is_alive()") for more details. > > With this implemented all test cases referenced in the above commit > pass. > > Reported-by: Ziqian SUN <zsun@redhat.com> > Cc: <stable@vger.kernel.org> # v4.3+ > Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> > Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> > (cherry picked from commit 783c3b53b9506db3e05daacfe34e0287eebb09d8) > Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com> Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com> > --- > arch/s390/kernel/uprobes.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/s390/kernel/uprobes.c b/arch/s390/kernel/uprobes.c > index d9d1f51..5007fac 100644 > --- a/arch/s390/kernel/uprobes.c > +++ b/arch/s390/kernel/uprobes.c > @@ -150,6 +150,15 @@ unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline, > return orig; > } > > +bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx, > + struct pt_regs *regs) > +{ > + if (ctx == RP_CHECK_CHAIN_CALL) > + return user_stack_pointer(regs) <= ret->stack; > + else > + return user_stack_pointer(regs) < ret->stack; > +} > + > /* Instruction Emulation */ > > static void adjust_psw_addr(psw_t *psw, unsigned long len) >
On 22.06.2018 18:31, Joseph Salisbury wrote: > From: Heiko Carstens <heiko.carstens@de.ibm.com> > > BugLink: http://bugs.launchpad.net/bugs/1777840 > > Implement s390 specific arch_uretprobe_is_alive() to avoid SIGSEGVs > observed with uretprobes in combination with setjmp/longjmp. > > See commit 2dea1d9c38e4 ("powerpc/uprobes: Implement > arch_uretprobe_is_alive()") for more details. > > With this implemented all test cases referenced in the above commit > pass. > > Reported-by: Ziqian SUN <zsun@redhat.com> > Cc: <stable@vger.kernel.org> # v4.3+ > Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> > Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> > (cherry picked from commit 783c3b53b9506db3e05daacfe34e0287eebb09d8) > Signed-off-by: Joseph Salisbury <joseph.salisbury@canonical.com> Acked-by: Stefan Bader <stefan.bader@canonical.com> > --- > arch/s390/kernel/uprobes.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/s390/kernel/uprobes.c b/arch/s390/kernel/uprobes.c > index d9d1f51..5007fac 100644 > --- a/arch/s390/kernel/uprobes.c > +++ b/arch/s390/kernel/uprobes.c > @@ -150,6 +150,15 @@ unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline, > return orig; > } > > +bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx, > + struct pt_regs *regs) > +{ > + if (ctx == RP_CHECK_CHAIN_CALL) > + return user_stack_pointer(regs) <= ret->stack; > + else > + return user_stack_pointer(regs) < ret->stack; > +} > + > /* Instruction Emulation */ > > static void adjust_psw_addr(psw_t *psw, unsigned long len) >
diff --git a/arch/s390/kernel/uprobes.c b/arch/s390/kernel/uprobes.c index d9d1f51..5007fac 100644 --- a/arch/s390/kernel/uprobes.c +++ b/arch/s390/kernel/uprobes.c @@ -150,6 +150,15 @@ unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline, return orig; } +bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx, + struct pt_regs *regs) +{ + if (ctx == RP_CHECK_CHAIN_CALL) + return user_stack_pointer(regs) <= ret->stack; + else + return user_stack_pointer(regs) < ret->stack; +} + /* Instruction Emulation */ static void adjust_psw_addr(psw_t *psw, unsigned long len)