[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] x86-64: extend numeric user mode selector checks
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1317818576 -7200 # Node ID 4dd3a1d5b26796c1c10c5c2a0026832675aa615d # Parent ed78d9bac40d465100d5dfb9998df6b633a53057 x86-64: extend numeric user mode selector checks ... to also cover Xen provided ones Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- diff -r ed78d9bac40d -r 4dd3a1d5b267 arch/x86_64/mm/fault-xen.c --- a/arch/x86_64/mm/fault-xen.c Wed Oct 05 14:39:04 2011 +0200 +++ b/arch/x86_64/mm/fault-xen.c Wed Oct 05 14:42:56 2011 +0200 @@ -146,7 +146,8 @@ /* Could check the LDT for lm, but for now it's good enough to assume that long mode only uses well known segments or kernel. */ - scan_more = (!user_mode(regs)) || (regs->cs == __USER_CS); + scan_more = (!user_mode(regs)) || (regs->cs == __USER_CS) + || (regs->cs == FLAT_USER_CS64); break; case 0x60: @@ -575,8 +576,8 @@ these addresses are not reachable. Just detect this case and return. Any code segment in LDT is compatibility mode. */ - if ((regs->cs == __USER32_CS || (regs->cs & (1<<2))) && - (address >> 32)) + if ((regs->cs == __USER32_CS || regs->cs == FLAT_USER_CS32 || + (regs->cs & (1<<2))) && (address >> 32)) return; if (exception_trace && unhandled_signal(tsk, SIGSEGV)) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |