aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-11-11 11:10:59 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-11-11 11:10:59 +0000
commit2bca9275d1ce603360474b81dc31cc3e2f92e0a6 (patch)
treec170dd31fed43985b901fe591be91c1ad8dc07fd
parent0b33972b25cba27ddcc6daa4a38cfdd9798427cb (diff)
downloadxen-2bca9275d1ce603360474b81dc31cc3e2f92e0a6.tar.gz
xen-2bca9275d1ce603360474b81dc31cc3e2f92e0a6.tar.bz2
xen-2bca9275d1ce603360474b81dc31cc3e2f92e0a6.zip
vmx: Fix realmode exception delivery to correctly check stack pointer size.
Bug tracked down by Tim Deegan <tim.deegan@citrix.com> Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
-rw-r--r--xen/arch/x86/hvm/vmx/realmode.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/xen/arch/x86/hvm/vmx/realmode.c b/xen/arch/x86/hvm/vmx/realmode.c
index 9bd1f25162..b067eb1615 100644
--- a/xen/arch/x86/hvm/vmx/realmode.c
+++ b/xen/arch/x86/hvm/vmx/realmode.c
@@ -69,7 +69,8 @@ static void realmode_deliver_exception(
frame[1] = csr->sel;
frame[2] = regs->eflags & ~X86_EFLAGS_RF;
- if ( hvmemul_ctxt->ctxt.sp_size == 32 )
+ /* We can't test hvmemul_ctxt->ctxt.sp_size: it may not be initialised. */
+ if ( hvmemul_ctxt->seg_reg[x86_seg_ss].attr.fields.db )
{
regs->esp -= 6;
pstk = regs->esp;