lkml.org 
[lkml]   [2013]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 004/212] ARM: 7876/1: clear Thumb-2 IT state on exception handling
    Date
    3.12-stable review patch.  If anyone has any objections, please let me know.

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

    From: Marc Zyngier <Marc.Zyngier@arm.com>

    commit e16b31bf47738f4498d7ce632e12d7d2a6a2492a upstream.

    The exception handling code fails to clear the IT state, potentially
    leading to incorrect execution of the fixup if the size of the IT
    block is more than one.

    Let fixup_exception do the IT sanitizing if a fixup has been found,
    and restore CPSR from the stack when returning from a data abort.

    Cc: Will Deacon <will.deacon@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/arm/kernel/entry-armv.S | 1 +
    arch/arm/mm/extable.c | 7 ++++++-
    2 files changed, 7 insertions(+), 1 deletion(-)

    --- a/arch/arm/kernel/entry-armv.S
    +++ b/arch/arm/kernel/entry-armv.S
    @@ -192,6 +192,7 @@ __dabt_svc:
    svc_entry
    mov r2, sp
    dabt_helper
    + THUMB( ldr r5, [sp, #S_PSR] ) @ potentially updated CPSR
    svc_exit r5 @ return from exception
    UNWIND(.fnend )
    ENDPROC(__dabt_svc)
    --- a/arch/arm/mm/extable.c
    +++ b/arch/arm/mm/extable.c
    @@ -9,8 +9,13 @@ int fixup_exception(struct pt_regs *regs
    const struct exception_table_entry *fixup;

    fixup = search_exception_tables(instruction_pointer(regs));
    - if (fixup)
    + if (fixup) {
    regs->ARM_pc = fixup->fixup;
    +#ifdef CONFIG_THUMB2_KERNEL
    + /* Clear the IT state to avoid nasty surprises in the fixup */
    + regs->ARM_cpsr &= ~PSR_IT_MASK;
    +#endif
    + }

    return fixup != NULL;
    }



    \
     
     \ /
      Last update: 2013-12-02 22:01    [W:4.065 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site