* [PATCH 4.19 BACKPORT] arm64: debug: Don't propagate UNKNOWN FAR into si_code for debug signals
@ 2019-04-03 10:34 Will Deacon
2019-04-03 13:56 ` Greg KH
0 siblings, 1 reply; 2+ messages in thread
From: Will Deacon @ 2019-04-03 10:34 UTC (permalink / raw)
To: gregkh; +Cc: stable, linux-kernel, sashal, Will Deacon, Catalin Marinas
Commit b9a4b9d084d978f80eb9210727c81804588b42ff upstream.
FAR_EL1 is UNKNOWN for all debug exceptions other than those caused by
taking a hardware watchpoint. Unfortunately, if a debug handler returns
a non-zero value, then we will propagate the UNKNOWN FAR value to
userspace via the si_addr field of the SIGTRAP siginfo_t.
Instead, let's set si_addr to take on the PC of the faulting instruction,
which we have available in the current pt_regs.
Cc: <stable@vger.kernel.org> # 4.19.y
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
arch/arm64/mm/fault.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 50b30ff30de4..a4c134677285 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -827,11 +827,12 @@ void __init hook_debug_fault_code(int nr,
debug_fault_info[nr].name = name;
}
-asmlinkage int __exception do_debug_exception(unsigned long addr,
+asmlinkage int __exception do_debug_exception(unsigned long addr_if_watchpoint,
unsigned int esr,
struct pt_regs *regs)
{
const struct fault_info *inf = debug_fault_info + DBG_ESR_EVT(esr);
+ unsigned long pc = instruction_pointer(regs);
int rv;
/*
@@ -841,10 +842,10 @@ asmlinkage int __exception do_debug_exception(unsigned long addr,
if (interrupts_enabled(regs))
trace_hardirqs_off();
- if (user_mode(regs) && instruction_pointer(regs) > TASK_SIZE)
+ if (user_mode(regs) && pc > TASK_SIZE)
arm64_apply_bp_hardening();
- if (!inf->fn(addr, esr, regs)) {
+ if (!inf->fn(addr_if_watchpoint, esr, regs)) {
rv = 1;
} else {
struct siginfo info;
@@ -853,7 +854,7 @@ asmlinkage int __exception do_debug_exception(unsigned long addr,
info.si_signo = inf->sig;
info.si_errno = 0;
info.si_code = inf->code;
- info.si_addr = (void __user *)addr;
+ info.si_addr = (void __user *)pc;
arm64_notify_die(inf->name, regs, &info, esr);
rv = 0;
}
--
2.11.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH 4.19 BACKPORT] arm64: debug: Don't propagate UNKNOWN FAR into si_code for debug signals
2019-04-03 10:34 [PATCH 4.19 BACKPORT] arm64: debug: Don't propagate UNKNOWN FAR into si_code for debug signals Will Deacon
@ 2019-04-03 13:56 ` Greg KH
0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2019-04-03 13:56 UTC (permalink / raw)
To: Will Deacon; +Cc: stable, linux-kernel, sashal, Catalin Marinas
On Wed, Apr 03, 2019 at 11:34:08AM +0100, Will Deacon wrote:
> Commit b9a4b9d084d978f80eb9210727c81804588b42ff upstream.
>
> FAR_EL1 is UNKNOWN for all debug exceptions other than those caused by
> taking a hardware watchpoint. Unfortunately, if a debug handler returns
> a non-zero value, then we will propagate the UNKNOWN FAR value to
> userspace via the si_addr field of the SIGTRAP siginfo_t.
>
> Instead, let's set si_addr to take on the PC of the faulting instruction,
> which we have available in the current pt_regs.
>
> Cc: <stable@vger.kernel.org> # 4.19.y
> Reviewed-by: Mark Rutland <mark.rutland@arm.com>
> Signed-off-by: Will Deacon <will.deacon@arm.com>
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> ---
> arch/arm64/mm/fault.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
Thanks for all 5 of these patches, now queued up.
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-04-03 13:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-03 10:34 [PATCH 4.19 BACKPORT] arm64: debug: Don't propagate UNKNOWN FAR into si_code for debug signals Will Deacon
2019-04-03 13:56 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).