• Andy Lutomirski's avatar
    x86/fault: Decode page fault OOPSes better · a1a371c4
    Andy Lutomirski authored
    One of Linus' favorite hobbies seems to be looking at OOPSes and
    decoding the error code in his head.  This is not one of my favorite
    hobbies :)
    
    Teach the page fault OOPS hander to decode the error code.  If it's
    a !USER fault from user mode, print an explicit note to that effect
    and print out the addresses of various tables that might cause such
    an error.
    
    With this patch applied, if I intentionally point the LDT at 0x0 and
    run the x86 selftests, I get:
    
      BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
      HW error: normal kernel read fault
      This was a system access from user code
      IDT: 0xfffffe0000000000 (limit=0xfff) GDT: 0xfffffe0000001000 (limit=0x7f)
      LDTR: 0x50 -- base=0x0 limit=0xfff7
      TR: 0x40 -- base=0xfffffe0000003000 limit=0x206f
      PGD 800000000456e067 P4D 800000000456e067 PUD 4623067 PMD 0
      SMP PTI
      CPU: 0 PID: 153 Comm: ldt_gdt_64 Not tainted 4.19.0+ #1317
      Hardware name: ...
      RIP: 0033:0x401454
    Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Yu-cheng Yu <yu-cheng.yu@intel.com>
    Link: http://lkml.kernel.org/r/11212acb25980cd1b3030875cd9502414fbb214d.1542841400.git.luto@kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    a1a371c4
fault.c 40.2 KB