]> git.itanic.dy.fi Git - linux-stable/commit
ARM: 9297/1: vfp: avoid unbalanced stack on 'success' return path
authorArd Biesheuvel <ardb@kernel.org>
Mon, 8 May 2023 12:40:19 +0000 (13:40 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 10 May 2023 09:50:25 +0000 (10:50 +0100)
commit2b951b0efbaa6c805854b60c11f08811054d50cd
treee24b752a3498179b8502425144a2797c918adffe
parent46dd6078dbc7e363a8bb01209da67015a1538929
ARM: 9297/1: vfp: avoid unbalanced stack on 'success' return path

Commit c76c6c4ecbec0deb5 ("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: c76c6c4ecbec0deb5 ("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: Linus Walleij <linus.walleij@linaro.org>
Tested-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Tested-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/vfp/entry.S
arch/arm/vfp/vfphw.S