[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.4-testing] x86_emulate: protmode_load_seg() cannot load system segments in long mode.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1250694068 -3600 # Node ID daf1ff2c7dbd59b2ab31e6427be58ffdc14e10fd # Parent 8bf8c7ca15d957bbcb928b2cb991f9a807b5d76d x86_emulate: protmode_load_seg() cannot load system segments in long mode. Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> xen-unstable changeset: 20034:71d6d6f2ecd6 xen-unstable date: Fri Aug 07 09:54:43 2009 +0100 --- xen/arch/x86/x86_emulate/x86_emulate.c | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff -r 8bf8c7ca15d9 -r daf1ff2c7dbd xen/arch/x86/x86_emulate/x86_emulate.c --- a/xen/arch/x86/x86_emulate/x86_emulate.c Wed Aug 19 16:00:32 2009 +0100 +++ b/xen/arch/x86/x86_emulate/x86_emulate.c Wed Aug 19 16:01:08 2009 +0100 @@ -1012,8 +1012,17 @@ protmode_load_seg( goto raise_exn; } - /* System segments must have the system flag (S) set. */ - if ( (desc.b & (1u<<12)) == (!is_x86_user_segment(seg) << 12) ) + if ( !is_x86_user_segment(seg) ) + { + /* System segments must have S flag == 0. */ + if ( desc.b & (1u << 12) ) + goto raise_exn; + /* We do not support 64-bit descriptor types. */ + if ( in_longmode(ctxt, ops) ) + return X86EMUL_UNHANDLEABLE; + } + /* User segments must have S flag == 1. */ + else if ( !(desc.b & (1u << 12)) ) goto raise_exn; dpl = (desc.b >> 13) & 3; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |