Commit cb515c66 authored by James Morse's avatar James Morse Committed by Treehugger Robot
Browse files

UPSTREAM: KVM: arm64: Stop handle_exit() from handling HVC twice when an SError occurs



Prior to commit defe21f4 ("KVM: arm64: Move PC rollback on SError to
HYP"), when an SError is synchronised due to another exception, KVM
handles the SError first. If the guest survives, the instruction that
triggered the original exception is re-exectued to handle the first
exception. HVC is treated as a special case as the instruction wouldn't
normally be re-exectued, as its not a trap.

Commit defe21f4 didn't preserve the behaviour of the 'return 1'
that skips the rest of handle_exit().

Since commit defe21f4, KVM will try to handle the SError and the
original exception at the same time. When the exception was an HVC,
fixup_guest_exit() has already rolled back ELR_EL2, meaning if the
guest has virtual SError masked, it will execute and handle the HVC
twice.

Restore the original behaviour.

Bug: 254441685
Fixes: defe21f4 ("KVM: arm64: Move PC rollback on SError to HYP")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarJames Morse <james.morse@arm.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20220127122052.1584324-4-james.morse@arm.com


(cherry picked from commit 1229630a)
Signed-off-by: default avatarLee Jones <joneslee@google.com>
Change-Id: I04ff663f94b2eb68bb36fbc1e962bd1b9e0f0bfb
parent 316b7560
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment