[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] xen/arm64: entry: Actually skip do_trap_*() when an SError is triggered



commit 35c64c3dce01c2d0689a8c13240bf48a10cef783
Author:     Julien Grall <jgrall@xxxxxxxxxx>
AuthorDate: Tue Aug 6 13:48:15 2024 +0100
Commit:     Julien Grall <julien@xxxxxxx>
CommitDate: Tue Aug 13 21:58:24 2024 +0100

    xen/arm64: entry: Actually skip do_trap_*() when an SError is triggered
    
    For SErrors, we support two configurations:
      * Every SErrors will result to a panic in Xen
      * We will forward SErrors triggered by a VM back to itself
    
    For the latter case, we want to skip the call to do_trap_*() because the PC
    was already adjusted.
    
    However, the alternative used to decide between the two configurations
    is inverted. This would result to the VM corrupting itself if:
      * x19 is non-zero in the panic case
      * advance PC too much in the second case
    
    Solve the issue by switch from alternative_if to alternative_if_not.
    
    Fixes: a458d3bd0d25 ("xen/arm: entry: Ensure the guest state is synced when 
receiving a vSError")
    Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>
---
 xen/arch/arm/arm64/entry.S | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S
index 6251135ebd..fab10f8a0d 100644
--- a/xen/arch/arm/arm64/entry.S
+++ b/xen/arch/arm/arm64/entry.S
@@ -259,7 +259,7 @@
          * apart. The easiest way is to duplicate the few instructions
          * that need to be skipped.
          */
-        alternative_if SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT
+        alternative_if_not SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT
         cbnz      x19, 1f
         mov       x0, sp
         bl        do_trap_\trap
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.