x86/traps: Ignore high word of regs->cs in early_fixup_exception()
commitfc0e81b2be
upstream. On the 80486 DX, it seems that some exceptions may leave garbage in the high bits of CS. This causes sporadic failures in which early_fixup_exception() refuses to fix up an exception. As far as I can tell, this has been buggy for a long time, but the problem seems to have been exacerbated by commits:1e02ce4ccc
("x86: Store a per-cpu shadow copy of CR4")e1bfc11c5a
("x86/init: Fix cr4_init_shadow() on CR4-less machines") This appears to have broken for as long as we've had early exception handling. [ This backport should apply to kernels from 3.4 - 4.5. ] Fixes:4c5023a3fa
("x86-32: Handle exception table entries during early boot") Cc: H. Peter Anvin <hpa@zytor.com> Reported-by: Matthew Whitehead <tedheadster@gmail.com> Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
995761627d
commit
5a5f703019
@ -571,7 +571,7 @@ early_idt_handler_common:
|
|||||||
movl %eax,%ds
|
movl %eax,%ds
|
||||||
movl %eax,%es
|
movl %eax,%es
|
||||||
|
|
||||||
cmpl $(__KERNEL_CS),32(%esp)
|
cmpw $(__KERNEL_CS),32(%esp)
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
leal 28(%esp),%eax # Pointer to %eip
|
leal 28(%esp),%eax # Pointer to %eip
|
||||||
|
Reference in New Issue
Block a user