diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-11-11 11:10:59 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-11-11 11:10:59 +0000 |
commit | 2bca9275d1ce603360474b81dc31cc3e2f92e0a6 (patch) | |
tree | c170dd31fed43985b901fe591be91c1ad8dc07fd | |
parent | 0b33972b25cba27ddcc6daa4a38cfdd9798427cb (diff) | |
download | xen-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.c | 3 |
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; |