Stefano Stabellini
2012-Dec-05 18:37 UTC
[PATCH] xen/arm: disable interrupts on return_to_hypervisor
At the moment it is possible to reach return_to_hypervisor with interrupts enabled (it happens all the times when we are actually going back to hypervisor mode, when we don''t take the return_to_guest path). If that happens we risk loosing the content of ELR_hyp: if we receive an interrupt right after restoring ELR_hyp, once we come back we''ll have a different value in ELR_hyp and the original is lost. In order to make the return_to_hypervisor path safe, we disable interrupts before restoring any registers. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- xen/arch/arm/entry.S | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/xen/arch/arm/entry.S b/xen/arch/arm/entry.S index 2ff32a1..1d6ff32 100644 --- a/xen/arch/arm/entry.S +++ b/xen/arch/arm/entry.S @@ -108,6 +108,7 @@ ENTRY(return_to_guest) RESTORE_ONE_BANKED(R11_fiq); RESTORE_ONE_BANKED(R12_fiq); /* Fall thru */ ENTRY(return_to_hypervisor) + cpsid i ldr lr, [sp, #UREGS_lr] ldr r11, [sp, #UREGS_pc] msr ELR_hyp, r11 -- 1.7.2.5
Ian Campbell
2012-Dec-06 10:19 UTC
Re: [PATCH] xen/arm: disable interrupts on return_to_hypervisor
On Wed, 2012-12-05 at 18:37 +0000, Stefano Stabellini wrote:> At the moment it is possible to reach return_to_hypervisor with > interrupts enabled (it happens all the times when we are actually going > back to hypervisor mode, when we don''t take the return_to_guest path). > > If that happens we risk loosing the content of ELR_hyp: if we receive an > interrupt right after restoring ELR_hyp, once we come back we''ll have a > different value in ELR_hyp and the original is lost. > > In order to make the return_to_hypervisor path safe, we disable > interrupts before restoring any registers. > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>Acked + applied, thanks.