[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.0-testing] x86_emulate: Do not push an error code onto a #UD exception stack
# HG changeset patch # User Andrew Cooper <andrew.cooper3@xxxxxxxxxx> # Date 1334648159 -3600 # Node ID ff02605dd3e0db0b97f22ec11d1fcc7a849c2c9e # Parent cbe8948799bfb81624c29675752aaaad390381f9 x86_emulate: Do not push an error code onto a #UD exception stack Signed-off-by: Keir Fraser <keir@xxxxxxx> xen-unstable changeset: 25099:4bd752a4cdf3 xen-unstable date: Fri Mar 23 20:51:48 2012 +0000 x86_emulate: raise #UD rather than #GP on invalid use of LOCK prefix From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxx> Committed-by: Keir Fraser <keir@xxxxxxx> xen-unstable changeset: 25098:2e45b26bc412 xen-unstable date: Fri Mar 23 20:45:16 2012 +0000 --- diff -r cbe8948799bf -r ff02605dd3e0 xen/arch/x86/x86_emulate/x86_emulate.c --- a/xen/arch/x86/x86_emulate/x86_emulate.c Fri Mar 23 13:58:58 2012 +0000 +++ b/xen/arch/x86/x86_emulate/x86_emulate.c Tue Apr 17 08:35:59 2012 +0100 @@ -1309,7 +1309,7 @@ x86_emulate( } /* Lock prefix is allowed only on RMW instructions. */ - generate_exception_if((d & Mov) && lock_prefix, EXC_GP, 0); + generate_exception_if((d & Mov) && lock_prefix, EXC_UD, -1); /* ModRM and SIB bytes. */ if ( d & ModRM ) @@ -1528,12 +1528,12 @@ x86_emulate( lock_prefix && ((b < 0x20) || (b > 0x23)) && /* MOV CRn/DRn */ (b != 0xc7), /* CMPXCHG{8,16}B */ - EXC_GP, 0); + EXC_UD, -1); dst.type = OP_NONE; break; case DstReg: - generate_exception_if(lock_prefix, EXC_GP, 0); + generate_exception_if(lock_prefix, EXC_UD, -1); dst.type = OP_REG; if ( d & ByteOp ) { @@ -1589,7 +1589,7 @@ x86_emulate( dst = ea; if ( dst.type == OP_REG ) { - generate_exception_if(lock_prefix, EXC_GP, 0); + generate_exception_if(lock_prefix, EXC_UD, -1); switch ( dst.bytes ) { case 1: dst.val = *(uint8_t *)dst.reg; break; @@ -3598,14 +3598,14 @@ x86_emulate( struct segment_register cs = { 0 }, ss = { 0 }; int rc; - generate_exception_if(in_realmode(ctxt, ops), EXC_UD, 0); - generate_exception_if(!in_protmode(ctxt, ops), EXC_UD, 0); + generate_exception_if(in_realmode(ctxt, ops), EXC_UD, -1); + generate_exception_if(!in_protmode(ctxt, ops), EXC_UD, -1); /* Inject #UD if syscall/sysret are disabled. */ fail_if(ops->read_msr == NULL); if ( (rc = ops->read_msr(MSR_EFER, &msr_content, ctxt)) != 0 ) goto done; - generate_exception_if((msr_content & EFER_SCE) == 0, EXC_UD, 0); + generate_exception_if((msr_content & EFER_SCE) == 0, EXC_UD, -1); if ( (rc = ops->read_msr(MSR_STAR, &msr_content, ctxt)) != 0 ) goto done; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |