• Ard Biesheuvel's avatar
    ARM: 9297/1: vfp: avoid unbalanced stack on 'success' return path · 2b951b0e
    Ard Biesheuvel authored
    Commit c76c6c4e ("ARM: 9294/2: vfp: Fix broken softirq handling
    with instrumentation enabled") updated the VFP exception entry logic to
    go via a C function, so that we get the compiler's version of
    local_bh_disable(), which may be instrumented, and isn't generally
    callable from assembler.
    
    However, this assumes that passing an alternative 'success' return
    address works in C as it does in asm, and this is only the case if the C
    calls in question are tail calls, as otherwise, the stack will need some
    unwinding as well.
    
    I have already sent patches to the list that replace most of the asm
    logic with C code, and so it is preferable to have a minimal fix that
    addresses the issue and can be backported along with the commit that it
    
    fixes to v6.3 from v6.4. Hopefully, we can land the C conversion for v6.5.
    
    So instead of passing the 'success' return address as a function
    argument, pass the stack address from where to pop it so that both LR
    and SP have the expected value.
    
    Fixes: c76c6c4e ("ARM: 9294/2: vfp: Fix broken softirq handling with ...")
    Reported-by: syzbot+d4b00edc2d0c910d4bf4@syzkaller.appspotmail.com
    Tested-by: syzbot+d4b00edc2d0c910d4bf4@syzkaller.appspotmail.com
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Tested-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Tested-by: default avatarAndre Przywara <andre.przywara@arm.com>
    Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
    2b951b0e
entry.S 757 Bytes