• Linus Torvalds's avatar
    Merge branch 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 6ec62961
    Linus Torvalds authored
    Pull objtool updates from Ingo Molnar:
     "This is a series from Peter Zijlstra that adds x86 build-time uaccess
      validation of SMAP to objtool, which will detect and warn about the
      following uaccess API usage bugs and weirdnesses:
    
       - call to %s() with UACCESS enabled
       - return with UACCESS enabled
       - return with UACCESS disabled from a UACCESS-safe function
       - recursive UACCESS enable
       - redundant UACCESS disable
       - UACCESS-safe disables UACCESS
    
      As it turns out not leaking uaccess permissions outside the intended
      uaccess functionality is hard when the interfaces are complex and when
      such bugs are mostly dormant.
    
      As a bonus we now also check the DF flag. We had at least one
      high-profile bug in that area in the early days of Linux, and the
      checking is fairly simple. The checks performed and warnings emitted
      are:
    
       - call to %s() with DF set
       - return with DF set
       - return with modified stack frame
       - recursive STD
       - redundant CLD
    
      It's all x86-only for now, but later on this can also be used for PAN
      on ARM and objtool is fairly cross-platform in principle.
    
      While all warnings emitted by this new checking facility that got
      reported to us were fixed, there might be GCC version dependent
      warnings that were not reported yet - which we'll address, should they
      trigger.
    
      The warnings are non-fatal build warnings"
    
    * 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits)
      mm/uaccess: Use 'unsigned long' to placate UBSAN warnings on older GCC versions
      x86/uaccess: Dont leak the AC flag into __put_user() argument evaluation
      sched/x86_64: Don't save flags on context switch
      objtool: Add Direction Flag validation
      objtool: Add UACCESS validation
      objtool: Fix sibling call detection
      objtool: Rewrite alt->skip_orig
      objtool: Add --backtrace support
      objtool: Rewrite add_ignores()
      objtool: Handle function aliases
      objtool: Set insn->func for alternatives
      x86/uaccess, kcov: Disable stack protector
      x86/uaccess, ftrace: Fix ftrace_likely_update() vs. SMAP
      x86/uaccess, ubsan: Fix UBSAN vs. SMAP
      x86/uaccess, kasan: Fix KASAN vs SMAP
      x86/smap: Ditch __stringify()
      x86/uaccess: Introduce user_access_{save,restore}()
      x86/uaccess, signal: Fix AC=1 bloat
      x86/uaccess: Always inline user_access_begin()
      x86/uaccess, xen: Suppress SMAP warnings
      ...
    6ec62961
check.c 58.5 KB