• Wanpeng Li's avatar
    x86/entry/64: Fix context tracking state warning when load_gs_index fails · 2fa5f04f
    Wanpeng Li authored
    This warning:
    
     WARNING: CPU: 0 PID: 3331 at arch/x86/entry/common.c:45 enter_from_user_mode+0x32/0x50
     CPU: 0 PID: 3331 Comm: ldt_gdt_64 Not tainted 4.8.0-rc7+ #13
     Call Trace:
      dump_stack+0x99/0xd0
      __warn+0xd1/0xf0
      warn_slowpath_null+0x1d/0x20
      enter_from_user_mode+0x32/0x50
      error_entry+0x6d/0xc0
      ? general_protection+0x12/0x30
      ? native_load_gs_index+0xd/0x20
      ? do_set_thread_area+0x19c/0x1f0
      SyS_set_thread_area+0x24/0x30
      do_int80_syscall_32+0x7c/0x220
      entry_INT80_compat+0x38/0x50
    
    ... can be reproduced by running the GS testcase of the ldt_gdt test unit in
    the x86 selftests.
    
    do_int80_syscall_32() will call enter_form_user_mode() to convert context
    tracking state from user state to kernel state. The load_gs_index() call
    can fail with user gsbase, gsbase will be fixed up and proceed if this
    happen.
    
    However, enter_from_user_mode() will be called again in the fixed up path
    though it is context tracking kernel state currently.
    
    This patch fixes it by just fixing up gsbase and telling lockdep that IRQs
    are off once load_gs_index() failed with user gsbase.
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Acked-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>
    Link: http://lkml.kernel.org/r/1475197266-3440-1-git-send-email-wanpeng.li@hotmail.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    2fa5f04f
entry_64.S 40.8 KB