lkml.org 
[lkml]   [2018]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 29/66] arm64: entry: Apply BP hardening for high-priority synchronous exceptions
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Mark Rutland <mark.rutland@arm.com>


    From: Will Deacon <will.deacon@arm.com>

    commit 5dfc6ed27710c42cbc15db5c0d4475699991da0a upstream.

    Software-step and PC alignment fault exceptions have higher priority than
    instruction abort exceptions, so apply the BP hardening hooks there too
    if the user PC appears to reside in kernel space.

    Reported-by: Dan Hettena <dhettena@nvidia.com>
    Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/arm64/kernel/entry.S | 6 ++++--
    arch/arm64/mm/fault.c | 9 +++++++++
    2 files changed, 13 insertions(+), 2 deletions(-)

    --- a/arch/arm64/kernel/entry.S
    +++ b/arch/arm64/kernel/entry.S
    @@ -624,8 +624,10 @@ el0_sp_pc:
    * Stack or PC alignment exception handling
    */
    mrs x26, far_el1
    - // enable interrupts before calling the main handler
    - enable_dbg_and_irq
    + enable_dbg
    +#ifdef CONFIG_TRACE_IRQFLAGS
    + bl trace_hardirqs_off
    +#endif
    ct_user_exit
    mov x0, x26
    mov x1, x25
    --- a/arch/arm64/mm/fault.c
    +++ b/arch/arm64/mm/fault.c
    @@ -617,6 +617,12 @@ asmlinkage void __exception do_sp_pc_abo
    struct siginfo info;
    struct task_struct *tsk = current;

    + if (user_mode(regs)) {
    + if (instruction_pointer(regs) > TASK_SIZE)
    + arm64_apply_bp_hardening();
    + local_irq_enable();
    + }
    +
    if (show_unhandled_signals && unhandled_signal(tsk, SIGBUS))
    pr_info_ratelimited("%s[%d]: %s exception: pc=%p sp=%p\n",
    tsk->comm, task_pid_nr(tsk),
    @@ -676,6 +682,9 @@ asmlinkage int __exception do_debug_exce
    if (interrupts_enabled(regs))
    trace_hardirqs_off();

    + if (user_mode(regs) && instruction_pointer(regs) > TASK_SIZE)
    + arm64_apply_bp_hardening();
    +
    if (!inf->fn(addr, esr, regs)) {
    rv = 1;
    } else {

    \
     
     \ /
      Last update: 2018-04-17 18:27    [W:4.156 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site