diff mbox

[Xen-devel,for,4.5] xen/arm64: Make show_registers working even if current is not correctly set

Message ID 1412089013-404-1-git-send-email-julien.grall@linaro.org
State Accepted, archived
Headers show

Commit Message

Julien Grall Sept. 30, 2014, 2:56 p.m. UTC
The commit 8ab802c "xen/arm: Restricted access to IFSR32_EL2 and FPEXC32_EL2"
introduced the use of the variable current in show_registers.

The variable is not correctly set until Xen has finished to boot.
Therefore any call to show_registers will result to crash Xen.

As the register IFSR32_EL2 is only printed when the registers represent
a guest view, Xen can read the value only for this case.

Signed-off-by: Julien Grall <julien.grall@linaro.org>

---

This is a bug fix for Xen 4.5.
---
 xen/arch/arm/traps.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ian Campbell Oct. 1, 2014, 10:34 a.m. UTC | #1
On Tue, 2014-09-30 at 15:56 +0100, Julien Grall wrote:
> The commit 8ab802c "xen/arm: Restricted access to IFSR32_EL2 and FPEXC32_EL2"
> introduced the use of the variable current in show_registers.
> 
> The variable is not correctly set until Xen has finished to boot.
> Therefore any call to show_registers will result to crash Xen.
> 
> As the register IFSR32_EL2 is only printed when the registers represent
> a guest view, Xen can read the value only for this case.
> 
> Signed-off-by: Julien Grall <julien.grall@linaro.org>

Acked-by: Ian Campbell <ian.campbell@citrix.com>
Ian Campbell Oct. 1, 2014, 12:18 p.m. UTC | #2
On Wed, 2014-10-01 at 11:34 +0100, Ian Campbell wrote:
> On Tue, 2014-09-30 at 15:56 +0100, Julien Grall wrote:
> > The commit 8ab802c "xen/arm: Restricted access to IFSR32_EL2 and FPEXC32_EL2"
> > introduced the use of the variable current in show_registers.
> > 
> > The variable is not correctly set until Xen has finished to boot.
> > Therefore any call to show_registers will result to crash Xen.
> > 
> > As the register IFSR32_EL2 is only printed when the registers represent
> > a guest view, Xen can read the value only for this case.
> > 
> > Signed-off-by: Julien Grall <julien.grall@linaro.org>
> 
> Acked-by: Ian Campbell <ian.campbell@citrix.com>

Applied.
diff mbox

Patch

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index cda0523..4b4b4e0 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -790,7 +790,7 @@  void show_registers(struct cpu_user_regs *regs)
 #else
     ctxt.far = READ_SYSREG(FAR_EL1);
     ctxt.esr_el1 = READ_SYSREG(ESR_EL1);
-    if ( is_32bit_domain(current->domain) )
+    if ( guest_mode(regs) && is_32bit_domain(current->domain) )
         ctxt.ifsr32_el2 = READ_SYSREG(IFSR32_EL2);
 #endif
     ctxt.vttbr_el2 = READ_SYSREG64(VTTBR_EL2);