• Andy Lutomirski's avatar
    x86/traps: Ignore high word of regs->cs in early_fixup_exception() · fc0e81b2
    Andy Lutomirski authored
    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:
    
      1e02ce4c ("x86: Store a per-cpu shadow copy of CR4")
      e1bfc11c ("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.
    
    [ Note to stable maintainers: This patch is needed all the way back to 3.4,
      but it will only apply to 4.6 and up, as it depends on commit:
    
        0e861fbb ("x86/head: Move early exception panic code into early_fixup_exception()")
    
      If you want to backport to kernels before 4.6, please don't backport the
      prerequisites (there was a big chain of them that rewrote a lot of the
      early exception machinery); instead, ask me and I can send you a one-liner
      that will apply. ]
    Reported-by: default avatarMatthew Whitehead <tedheadster@gmail.com>
    Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Fixes: 4c5023a3 ("x86-32: Handle exception table entries during early boot")
    Link: http://lkml.kernel.org/r/cb32c69920e58a1a58e7b5cad975038a69c0ce7d.1479609510.git.luto@kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    fc0e81b2
extable.c 4.61 KB