Skip to content
  1. Nov 27, 2019
    • Masami Hiramatsu's avatar
      kprobes: Set unoptimized flag after unoptimizing code · f66c0447
      Masami Hiramatsu authored
      
      
      Set the unoptimized flag after confirming the code is completely
      unoptimized. Without this fix, when a kprobe hits the intermediate
      modified instruction (the first byte is replaced by an INT3, but
      later bytes can still be a jump address operand) while unoptimizing,
      it can return to the middle byte of the modified code, which causes
      an invalid instruction exception in the kernel.
      
      Usually, this is a rare case, but if we put a probe on the function
      call while text patching, it always causes a kernel panic as below:
      
       # echo p text_poke+5 > kprobe_events
       # echo 1 > events/kprobes/enable
       # echo 0 > events/kprobes/enable
      
      invalid opcode: 0000 [#1] PREEMPT SMP PTI
       RIP: 0010:text_poke+0x9/0x50
       Call Trace:
        arch_unoptimize_kprobe+0x22/0x28
        arch_unoptimize_kprobes+0x39/0x87
        kprobe_optimizer+0x6e/0x290
        process_one_work+0x2a0/0x610
        worker_thread+0x28/0x3d0
        ? process_one_work+0x610/0x610
        kthread+0x10d/0x130
        ? kthread_park+0x80/0x80
        ret_from_fork+0x3a/0x50
      
      text_poke() is used for patching the code in optprobes.
      
      This can happen even if we blacklist text_poke() and other functions,
      because there is a small time window during which we show the intermediate
      code to other CPUs.
      
       [ mingo: Edited the changelog. ]
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: bristot@redhat.com
      Fixes: 6274de49 ("kprobes: Support delayed unoptimizing")
      Link: https://lkml.kernel.org/r/157483422375.25881.13508326028469515760.stgit@devnote2
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      f66c0447
    • Masami Hiramatsu's avatar
      x86/alternatives: Sync bp_patching update for avoiding NULL pointer exception · 285a54ef
      Masami Hiramatsu authored
      
      
      ftracetest multiple_kprobes.tc testcase hits the following NULL pointer
      exception:
      
       BUG: kernel NULL pointer dereference, address: 0000000000000000
       PGD 800000007bf60067 P4D 800000007bf60067 PUD 7bf5f067 PMD 0
       Oops: 0000 [#1] PREEMPT SMP PTI
       RIP: 0010:poke_int3_handler+0x39/0x100
       Call Trace:
        <IRQ>
        do_int3+0xd/0xf0
        int3+0x42/0x50
        RIP: 0010:sched_clock+0x6/0x10
      
      poke_int3_handler+0x39 was alternatives:958:
      
        static inline void *text_poke_addr(struct text_poke_loc *tp)
        {
                return _stext + tp->rel_addr; <------ Here is line #958
        }
      
      This seems to be caused by tp (bp_patching.vec) being NULL but
      bp_patching.nr_entries != 0. There is a small chance for this
      to happen, because we have no synchronization between the zeroing
      of bp_patching.nr_entries and before clearing bp_patching.vec.
      
      Steve suggested we could fix this by adding sync_core(), because int3
      is done with interrupts disabled, and the on_each_cpu() requires
      all CPUs to have had their interrupts enabled.
      
       [ mingo: Edited the comments and the changelog. ]
      
      Suggested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: bristot@redhat.com
      Fixes: c0213b0a ("x86/alternative: Batch of patch operations")
      Link: https://lkml.kernel.org/r/157483421229.25881.15314414408559963162.stgit@devnote2
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      285a54ef
    • Peter Zijlstra's avatar
      x86/alternatives: Use INT3_INSN_SIZE · 76ffa720
      Peter Zijlstra authored
      
      
      Use INT3_INSN_SIZE instead of sizeof(int3).
      
      Suggested-by: default avatarIngo Molnar <mingo@kernel.org>
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy 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: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132458.460144656@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      76ffa720
    • Peter Zijlstra's avatar
      x86/kprobe: Add comments to arch_{,un}optimize_kprobes() · f2cb4f95
      Peter Zijlstra authored
      
      
      Add a few words describing how it is safe to overwrite the 4 bytes
      after a kprobe. In specific it is possible the JMP.d32 required for
      the optimized kprobe overwrites multiple instructions.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy 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: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132458.401696663@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      f2cb4f95
    • Peter Zijlstra's avatar
      ftrace: Rework event_create_dir() · 04ae87a5
      Peter Zijlstra authored
      
      
      Rework event_create_dir() to use an array of static data instead of
      function pointers where possible.
      
      The problem is that it would call the function pointer on module load
      before parse_args(), possibly even before jump_labels were initialized.
      Luckily the generated functions don't use jump_labels but it still seems
      fragile. It also gets in the way of changing when we make the module map
      executable.
      
      The generated function are basically calling trace_define_field() with a
      bunch of static arguments. So instead of a function, capture these
      arguments in a static array, avoiding the function call.
      
      Now there are a number of cases where the fields are dynamic (syscall
      arguments, kprobes and uprobes), in which case a static array does not
      work, for these we preserve the function call. Luckily all these cases
      are not related to modules and so we can retain the function call for
      them.
      
      Also fix up all broken tracepoint definitions that now generate a
      compile error.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Reviewed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy 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: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132458.342979914@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      04ae87a5
    • Peter Zijlstra's avatar
      module: Remove set_all_modules_text_*() · 958de668
      Peter Zijlstra authored
      
      
      Now that there are no users of set_all_modules_text_*() left, remove
      it.
      
      While it appears nds32 uses it, it does not have STRICT_MODULE_RWX and
      therefore ends up with the NOP stubs.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: Greentime Hu <green.hu@gmail.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jessica Yu <jeyu@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vincent Chen <deanbo422@gmail.com>
      Link: https://lkml.kernel.org/r/20191111132458.284298307@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      958de668
    • Peter Zijlstra's avatar
      arm/ftrace: Use __patch_text() · 5a735583
      Peter Zijlstra authored
      
      
      Instead of flipping text protection, use the patch_text infrastructure
      that uses a fixmap alias where required.
      
      This removes the last user of set_all_modules_text_*().
      
      Tested-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: Andy 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: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: ard.biesheuvel@linaro.org
      Cc: james.morse@arm.com
      Cc: rabin@rab.in
      Link: https://lkml.kernel.org/r/20191113092636.GG4131@hirez.programming.kicks-ass.net
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      5a735583
    • Peter Zijlstra's avatar
      x86/kprobes: Fix ordering while text-patching · 5c02ece8
      Peter Zijlstra authored
      
      
      Kprobes does something like:
      
      register:
      	arch_arm_kprobe()
      	  text_poke(INT3)
                /* guarantees nothing, INT3 will become visible at some point, maybe */
      
              kprobe_optimizer()
      	  /* guarantees the bytes after INT3 are unused */
      	  synchronize_rcu_tasks();
      	  text_poke_bp(JMP32);
      	  /* implies IPI-sync, kprobe really is enabled */
      
      unregister:
      	__disarm_kprobe()
      	  unoptimize_kprobe()
      	    text_poke_bp(INT3 + tail);
      	    /* implies IPI-sync, so tail is guaranteed visible */
                arch_disarm_kprobe()
                  text_poke(old);
      	    /* guarantees nothing, old will maybe become visible */
      
      	synchronize_rcu()
      
              free-stuff
      
      Now the problem is that on register, the synchronize_rcu_tasks() does
      not imply sufficient to guarantee all CPUs have already observed INT3
      (although in practice this is exceedingly unlikely not to have
      happened) (similar to how MEMBARRIER_CMD_PRIVATE_EXPEDITED does not
      imply MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE).
      
      Worse, even if it did, we'd have to do 2 synchronize calls to provide
      the guarantee we're looking for, the first to ensure INT3 is visible,
      the second to guarantee nobody is then still using the instruction
      bytes after INT3.
      
      Similar on unregister; the synchronize_rcu() between
      __unregister_kprobe_top() and __unregister_kprobe_bottom() does not
      guarantee all CPUs are free of the INT3 (and observe the old text).
      
      Therefore, sprinkle some IPI-sync love around. This guarantees that
      all CPUs agree on the text and RCU once again provides the required
      guaranteed.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Reviewed-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Acked-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Cc: Andy 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: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132458.162172862@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      5c02ece8
    • Peter Zijlstra's avatar
      x86/kprobes: Convert to text-patching.h · ab09e95c
      Peter Zijlstra authored
      
      
      Convert kprobes to the new text-poke naming.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy 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: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132458.103959370@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      ab09e95c
    • Borislav Petkov's avatar
      x86/ftrace: Mark ftrace_modify_code_direct() __ref · 38ebd8d1
      Borislav Petkov authored
      
      
      ... because it calls the .init.text function text_poke_early(). That is
      ok because it does call that function early, during boot.
      
      Fixes: 9706f7c3531f ("x86/ftrace: Use text_poke()")
      Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Acked-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Daniel Bristot de Oliveira <bristot@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191116204607.GC23231@zn.tnic
      38ebd8d1
    • Peter Zijlstra's avatar
      x86/alternative: Shrink text_poke_loc · 4531ef6a
      Peter Zijlstra authored
      
      
      Employ the fact that all text must be within a s32 displacement of one
      another to shrink the text_poke_loc::addr field. Make it relative to
      _stext.
      
      This then shrinks struct text_poke_loc to 16 bytes, and consequently
      increases TP_VEC_MAX from 170 to 256.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132458.047052889@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      4531ef6a
    • Peter Zijlstra's avatar
      x86/alternative: Remove text_poke_loc::len · 97e6c977
      Peter Zijlstra authored
      
      
      Per the BUG_ON(len != insn.length) in text_poke_loc_init(), tp->len
      must indeed be the same as text_opcode_size(tp->opcode). Use this to
      remove this field from the structure.
      
      Sadly, due to 8 byte alignment, this only increases the structure
      padding.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.989922744@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      97e6c977
    • Peter Zijlstra's avatar
      x86/ftrace: Use text_gen_insn() · 67c1d4a2
      Peter Zijlstra authored
      
      
      Replace the ftrace_code_union with the generic text_gen_insn() helper,
      which does exactly this.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.932808000@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      67c1d4a2
    • Peter Zijlstra's avatar
      x86/alternative: Add text_opcode_size() · 254d2c04
      Peter Zijlstra authored
      
      
      Introduce a common helper to map *_INSN_OPCODE to *_INSN_SIZE.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.875666061@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      254d2c04
    • Peter Zijlstra's avatar
      x86/mm: Remove set_kernel_text_r[ow]() · c12af440
      Peter Zijlstra authored
      
      
      With the last and only user of these functions gone (ftrace) remove
      them as well to avoid ever growing new users.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.819095320@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      c12af440
    • Peter Zijlstra's avatar
      x86/ftrace: Use text_poke() · 768ae440
      Peter Zijlstra authored
      
      
      Move ftrace over to using the generic x86 text_poke functions; this
      avoids having a second/different copy of that code around.
      
      This also avoids ftrace violating the (new) W^X rule and avoids
      fragmenting the kernel text page-tables, due to no longer having to
      toggle them RW.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Reviewed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Daniel Bristot de Oliveira <bristot@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.761255803@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      768ae440
    • Peter Zijlstra's avatar
      x86/alternatives: Add and use text_gen_insn() helper · 63f62add
      Peter Zijlstra authored
      
      
      Provide a simple helper function to create common instruction
      encodings.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Daniel Bristot de Oliveira <bristot@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.703538332@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      63f62add
    • Peter Zijlstra's avatar
      x86/alternatives, jump_label: Provide better text_poke() batching interface · 18cbc8be
      Peter Zijlstra authored
      
      
      Adding another text_poke_bp_batch() user made me realize the interface
      is all sorts of wrong. The text poke vector should be internal to the
      implementation.
      
      This then results in a trivial interface:
      
        text_poke_queue()  - which has the 'normal' text_poke_bp() interface
        text_poke_finish() - which takes no arguments and flushes any
                             pending text_poke()s.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Reviewed-by: default avatarDaniel Bristot de Oliveira <bristot@redhat.com>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.646280715@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      18cbc8be
    • Peter Zijlstra's avatar
      x86/alternatives: Update int3_emulate_push() comment · 8f4a4160
      Peter Zijlstra authored
      
      
      Update the comment now that we've merged x86_32 support.
      
      Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Tested-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132457.588386013@infradead.org
      
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      8f4a4160
    • Linus Torvalds's avatar
      Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · c2da5bdc
      Linus Torvalds authored
      Pull x86 merge fix from Ingo Molnar:
       "I missed one other semantic conflict that can result in build failures
        on certain stripped down x86 32-bit configs, for example 32-bit
        'allnoconfig' where CONFIG_X86_IOPL_IOPERM gets turned off"
      
      * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/iopl: Make 'struct tss_struct' constant size again
      c2da5bdc
    • Linus Torvalds's avatar
      Merge branch 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 168829ad
      Linus Torvalds authored
      Pull locking updates from Ingo Molnar:
       "The main changes in this cycle were:
      
         - A comprehensive rewrite of the robust/PI futex code's exit handling
           to fix various exit races. (Thomas Gleixner et al)
      
         - Rework the generic REFCOUNT_FULL implementation using
           atomic_fetch_* operations so that the performance impact of the
           cmpxchg() loops is mitigated for common refcount operations.
      
           With these performance improvements the generic implementation of
           refcount_t should be good enough for everybody - and this got
           confirmed by performance testing, so remove ARCH_HAS_REFCOUNT and
           REFCOUNT_FULL entirely, leaving the generic implementation enabled
           unconditionally. (Will Deacon)
      
         - Other misc changes, fixes, cleanups"
      
      * 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits)
        lkdtm: Remove references to CONFIG_REFCOUNT_FULL
        locking/refcount: Remove unused 'refcount_error_report()' function
        locking/refcount: Consolidate implementations of refcount_t
        locking/refcount: Consolidate REFCOUNT_{MAX,SATURATED} definitions
        locking/refcount: Move saturation warnings out of line
        locking/refcount: Improve performance of generic REFCOUNT_FULL code
        locking/refcount: Move the bulk of the REFCOUNT_FULL implementation into the <linux/refcount.h> header
        locking/refcount: Remove unused refcount_*_checked() variants
        locking/refcount: Ensure integer operands are treated as signed
        locking/refcount: Define constants for saturation and max refcount values
        futex: Prevent exit livelock
        futex: Provide distinct return value when owner is exiting
        futex: Add mutex around futex exit
        futex: Provide state handling for exec() as well
        futex: Sanitize exit state handling
        futex: Mark the begin of futex exit explicitly
        futex: Set task::futex_state to DEAD right after handling futex exit
        futex: Split futex_mm_release() for exit/exec
        exit/exec: Seperate mm_release()
        futex: Replace PF_EXITPIDONE with a state
        ...
      168829ad
    • Linus Torvalds's avatar
      Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 1ae78780
      Linus Torvalds authored
      Pull RCU updates from Ingo Molnar:
       "The main changes in this cycle were:
      
         - Dynamic tick (nohz) updates, perhaps most notably changes to force
           the tick on when needed due to lengthy in-kernel execution on CPUs
           on which RCU is waiting.
      
         - Linux-kernel memory consistency model updates.
      
         - Replace rcu_swap_protected() with rcu_prepace_pointer().
      
         - Torture-test updates.
      
         - Documentation updates.
      
         - Miscellaneous fixes"
      
      * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (51 commits)
        security/safesetid: Replace rcu_swap_protected() with rcu_replace_pointer()
        net/sched: Replace rcu_swap_protected() with rcu_replace_pointer()
        net/netfilter: Replace rcu_swap_protected() with rcu_replace_pointer()
        net/core: Replace rcu_swap_protected() with rcu_replace_pointer()
        bpf/cgroup: Replace rcu_swap_protected() with rcu_replace_pointer()
        fs/afs: Replace rcu_swap_protected() with rcu_replace_pointer()
        drivers/scsi: Replace rcu_swap_protected() with rcu_replace_pointer()
        drm/i915: Replace rcu_swap_protected() with rcu_replace_pointer()
        x86/kvm/pmu: Replace rcu_swap_protected() with rcu_replace_pointer()
        rcu: Upgrade rcu_swap_protected() to rcu_replace_pointer()
        rcu: Suppress levelspread uninitialized messages
        rcu: Fix uninitialized variable in nocb_gp_wait()
        rcu: Update descriptions for rcu_future_grace_period tracepoint
        rcu: Update descriptions for rcu_nocb_wake tracepoint
        rcu: Remove obsolete descriptions for rcu_barrier tracepoint
        rcu: Ensure that ->rcu_urgent_qs is set before resched IPI
        workqueue: Convert for_each_wq to use built-in list check
        rcu: Several rcu_segcblist functions can be static
        rcu: Remove unused function hlist_bl_del_init_rcu()
        Documentation: Rename rcu_node_context_switch() to rcu_note_context_switch()
        ...
      1ae78780
    • Linus Torvalds's avatar
      Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 77a05940
      Linus Torvalds authored
      Pull scheduler updates from Ingo Molnar:
       "The biggest changes in this cycle were:
      
         - Make kcpustat vtime aware (Frederic Weisbecker)
      
         - Rework the CFS load_balance() logic (Vincent Guittot)
      
         - Misc cleanups, smaller enhancements, fixes.
      
        The load-balancing rework is the most intrusive change: it replaces
        the old heuristics that have become less meaningful after the
        introduction of the PELT metrics, with a grounds-up load-balancing
        algorithm.
      
        As such it's not really an iterative series, but replaces the old
        load-balancing logic with the new one. We hope there are no
        performance regressions left - but statistically it's highly probable
        that there *is* going to be some workload that is hurting from these
        chnages. If so then we'd prefer to have a look at that workload and
        fix its scheduling, instead of reverting the changes"
      
      * 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (46 commits)
        rackmeter: Use vtime aware kcpustat accessor
        leds: Use all-in-one vtime aware kcpustat accessor
        cpufreq: Use vtime aware kcpustat accessors for user time
        procfs: Use all-in-one vtime aware kcpustat accessor
        sched/vtime: Bring up complete kcpustat accessor
        sched/cputime: Support other fields on kcpustat_field()
        sched/cpufreq: Move the cfs_rq_util_change() call to cpufreq_update_util()
        sched/fair: Add comments for group_type and balancing at SD_NUMA level
        sched/fair: Fix rework of find_idlest_group()
        sched/uclamp: Fix overzealous type replacement
        sched/Kconfig: Fix spelling mistake in user-visible help text
        sched/core: Further clarify sched_class::set_next_task()
        sched/fair: Use mul_u32_u32()
        sched/core: Simplify sched_class::pick_next_task()
        sched/core: Optimize pick_next_task()
        sched/core: Make pick_next_task_idle() more consistent
        sched/fair: Better document newidle_balance()
        leds: Use vtime aware kcpustat accessor to fetch CPUTIME_SYSTEM
        cpufreq: Use vtime aware kcpustat accessor to fetch CPUTIME_SYSTEM
        procfs: Use vtime aware kcpustat accessor to fetch CPUTIME_SYSTEM
        ...
      77a05940
    • Linus Torvalds's avatar
      Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 3f59dbca
      Linus Torvalds authored
      Pull perf updates from Ingo Molnar:
       "The main kernel side changes in this cycle were:
      
         - Various Intel-PT updates and optimizations (Alexander Shishkin)
      
         - Prohibit kprobes on Xen/KVM emulate prefixes (Masami Hiramatsu)
      
         - Add support for LSM and SELinux checks to control access to the
           perf syscall (Joel Fernandes)
      
         - Misc other changes, optimizations, fixes and cleanups - see the
           shortlog for details.
      
        There were numerous tooling changes as well - 254 non-merge commits.
        Here are the main changes - too many to list in detail:
      
         - Enhancements to core tooling infrastructure, perf.data, libperf,
           libtraceevent, event parsing, vendor events, Intel PT, callchains,
           BPF support and instruction decoding.
      
         - There were updates to the following tools:
      
              perf annotate
              perf diff
              perf inject
              perf kvm
              perf list
              perf maps
              perf parse
              perf probe
              perf record
              perf report
              perf script
              perf stat
              perf test
              perf trace
      
         - And a lot of other changes: please see the shortlog and Git log for
           more details"
      
      * 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (279 commits)
        perf parse: Fix potential memory leak when handling tracepoint errors
        perf probe: Fix spelling mistake "addrees" -> "address"
        libtraceevent: Fix memory leakage in copy_filter_type
        libtraceevent: Fix header installation
        perf intel-bts: Does not support AUX area sampling
        perf intel-pt: Add support for decoding AUX area samples
        perf intel-pt: Add support for recording AUX area samples
        perf pmu: When using default config, record which bits of config were changed by the user
        perf auxtrace: Add support for queuing AUX area samples
        perf session: Add facility to peek at all events
        perf auxtrace: Add support for dumping AUX area samples
        perf inject: Cut AUX area samples
        perf record: Add aux-sample-size config term
        perf record: Add support for AUX area sampling
        perf auxtrace: Add support for AUX area sample recording
        perf auxtrace: Move perf_evsel__find_pmu()
        perf record: Add a function to test for kernel support for AUX area sampling
        perf tools: Add kernel AUX area sampling definitions
        perf/core: Make the mlock accounting simple again
        perf report: Jump to symbol source view from total cycles view
        ...
      3f59dbca
    • Linus Torvalds's avatar
      Merge branch 'efi-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · df28204b
      Linus Torvalds authored
      Pull EFI updates from Ingo Molnar:
       "The main changes in this cycle were:
      
         - Wire up the EFI RNG code for x86. This enables an additional source
           of entropy during early boot.
      
         - Enable the TPM event log code on ARM platforms.
      
         - Update Ard's email address"
      
      * 'efi-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        efi: libstub/tpm: enable tpm eventlog function for ARM platforms
        x86: efi/random: Invoke EFI_RNG_PROTOCOL to seed the UEFI RNG table
        efi/random: use arch-independent efi_call_proto()
        MAINTAINERS: update Ard's email address to @kernel.org
      df28204b
    • Linus Torvalds's avatar
      Merge branch 'core-stacktrace-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 3f612813
      Linus Torvalds authored
      Pull stacktrace cleanup from Ingo Molnar:
       "A minor cleanup"
      
      * 'core-stacktrace-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        stacktrace: Get rid of unneeded '!!' pattern
      3f612813
    • Ingo Molnar's avatar
      x86/iopl: Make 'struct tss_struct' constant size again · 0bcd7762
      Ingo Molnar authored
      After the following commit:
      
        05b042a1: ("x86/pti/32: Calculate the various PTI cpu_entry_area sizes correctly, make the CPU_ENTRY_AREA_PAGES assert precise")
      
      'struct cpu_entry_area' has to be Kconfig invariant, so that we always
      have a matching CPU_ENTRY_AREA_PAGES size.
      
      This commit added a CONFIG_X86_IOPL_IOPERM dependency to tss_struct:
      
        111e7b15: ("x86/ioperm: Extend IOPL config to control ioperm() as well")
      
      Which, if CONFIG_X86_IOPL_IOPERM is turned off, reduces the size of
      cpu_entry_area by two pages, triggering the assert:
      
        ./include/linux/compiler.h:391:38: error: call to ‘__compiletime_assert_202’ declared with attribute error: BUILD_BUG_ON failed: (CPU_ENTRY_AREA_PAGES+1)*PAGE_SIZE != CPU_ENTRY_AREA_MAP_SIZE
      
      Simplify the Kconfig dependencies and make cpu_entry_area constant
      size on 32-bit kernels again.
      
      Fixes: 05b042a1
      
      : ("x86/pti/32: Calculate the various PTI cpu_entry_area sizes correctly, make the CPU_ENTRY_AREA_PAGES assert precise")
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      0bcd7762
    • Linus Torvalds's avatar
      Revert "vfs: properly and reliably lock f_pos in fdget_pos()" · 2be7d348
      Linus Torvalds authored
      This reverts commit 0be0ee71
      
      .
      
      I was hoping it would be benign to switch over entirely to FMODE_STREAM,
      and we'd have just a couple of small fixups we'd need, but it looks like
      we're not quite there yet.
      
      While it worked fine on both my desktop and laptop, they are fairly
      similar in other respects, and run mostly the same loads.  Kenneth
      Crudup reports that it seems to break both his vmware installation and
      the KDE upower service.  In both cases apparently leading to timeouts
      due to waitinmg for the f_pos lock.
      
      There are a number of character devices in particular that definitely
      want stream-like behavior, but that currently don't get marked as
      streams, and as a result get the exclusion between concurrent
      read()/write() on the same file descriptor.  Which doesn't work well for
      them.
      
      The most obvious example if this is /dev/console and /dev/tty, which use
      console_fops and tty_fops respectively (and ptmx_fops for the pty master
      side).  It may be that it's just this that causes problems, but we
      clearly weren't ready yet.
      
      Because there's a number of other likely common cases that don't have
      llseek implementations and would seem to act as stream devices:
      
        /dev/fuse		(fuse_dev_operations)
        /dev/mcelog		(mce_chrdev_ops)
        /dev/mei0		(mei_fops)
        /dev/net/tun		(tun_fops)
        /dev/nvme0		(nvme_dev_fops)
        /dev/tpm0		(tpm_fops)
        /proc/self/ns/mnt	(ns_file_operations)
        /dev/snd/pcm*		(snd_pcm_f_ops[])
      
      and while some of these could be trivially automatically detected by the
      vfs layer when the character device is opened by just noticing that they
      have no read or write operations either, it often isn't that obvious.
      
      Some character devices most definitely do use the file position, even if
      they don't allow seeking: the firmware update code, for example, uses
      simple_read_from_buffer() that does use f_pos, but doesn't allow seeking
      back and forth.
      
      We'll revisit this when there's a better way to detect the problem and
      fix it (possibly with a coccinelle script to do more of the FMODE_STREAM
      annotations).
      
      Reported-by: default avatarKenneth R. Crudup <kenny@panix.com>
      Cc: Kirill Smelkov <kirr@nexedi.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2be7d348
    • Linus Torvalds's avatar
      Merge branch 'x86-iopl-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · ab851d49
      Linus Torvalds authored
      Pull x86 iopl updates from Ingo Molnar:
       "This implements a nice simplification of the iopl and ioperm code that
        Thomas Gleixner discovered: we can implement the IO privilege features
        of the iopl system call by using the IO permission bitmap in
        permissive mode, while trapping CLI/STI/POPF/PUSHF uses in user-space
        if they change the interrupt flag.
      
        This implements that feature, with testing facilities and related
        cleanups"
      
      [ "Simplification" may be an over-statement. The main goal is to avoid
        the cli/sti of iopl by effectively implementing the IO port access
        parts of iopl in terms of ioperm.
      
        This may end up not workign well in case people actually depend on
        cli/sti being available, or if there are mixed uses of iopl and
        ioperm. We will see..       - Linus ]
      
      * 'x86-iopl-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (22 commits)
        x86/ioperm: Fix use of deprecated config option
        x86/entry/32: Clarify register saving in __switch_to_asm()
        selftests/x86/iopl: Extend test to cover IOPL emulation
        x86/ioperm: Extend IOPL config to control ioperm() as well
        x86/iopl: Remove legacy IOPL option
        x86/iopl: Restrict iopl() permission scope
        x86/iopl: Fixup misleading comment
        selftests/x86/ioperm: Extend testing so the shared bitmap is exercised
        x86/ioperm: Share I/O bitmap if identical
        x86/ioperm: Remove bitmap if all permissions dropped
        x86/ioperm: Move TSS bitmap update to exit to user work
        x86/ioperm: Add bitmap sequence number
        x86/ioperm: Move iobitmap data into a struct
        x86/tss: Move I/O bitmap data into a seperate struct
        x86/io: Speedup schedule out of I/O bitmap user
        x86/ioperm: Avoid bitmap allocation if no permissions are set
        x86/ioperm: Simplify first ioperm() invocation logic
        x86/iopl: Cleanup include maze
        x86/tss: Fix and move VMX BUILD_BUG_ON()
        x86/cpu: Unify cpu_init()
        ...
      ab851d49
    • Linus Torvalds's avatar
      Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 1d872004
      Linus Torvalds authored
      Pull x86 asm updates from Ingo Molnar:
       "The main changes in this cycle were:
      
         - Cross-arch changes to move the linker sections for NOTES and
           EXCEPTION_TABLE into the RO_DATA area, where they belong on most
           architectures. (Kees Cook)
      
         - Switch the x86 linker fill byte from x90 (NOP) to 0xcc (INT3), to
           trap jumps into the middle of those padding areas instead of
           sliding execution. (Kees Cook)
      
         - A thorough cleanup of symbol definitions within x86 assembler code.
           The rather randomly named macros got streamlined around a
           (hopefully) straightforward naming scheme:
      
              SYM_START(name, linkage, align...)
              SYM_END(name, sym_type)
      
              SYM_FUNC_START(name)
              SYM_FUNC_END(name)
      
              SYM_CODE_START(name)
              SYM_CODE_END(name)
      
              SYM_DATA_START(name)
              SYM_DATA_END(name)
      
           etc - with about three times of these basic primitives with some
           label, local symbol or attribute variant, expressed via postfixes.
      
           No change in functionality intended. (Jiri Slaby)
      
         - Misc other changes, cleanups and smaller fixes"
      
      * 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (67 commits)
        x86/entry/64: Remove pointless jump in paranoid_exit
        x86/entry/32: Remove unused resume_userspace label
        x86/build/vdso: Remove meaningless CFLAGS_REMOVE_*.o
        m68k: Convert missed RODATA to RO_DATA
        x86/vmlinux: Use INT3 instead of NOP for linker fill bytes
        x86/mm: Report actual image regions in /proc/iomem
        x86/mm: Report which part of kernel image is freed
        x86/mm: Remove redundant address-of operators on addresses
        xtensa: Move EXCEPTION_TABLE to RO_DATA segment
        powerpc: Move EXCEPTION_TABLE to RO_DATA segment
        parisc: Move EXCEPTION_TABLE to RO_DATA segment
        microblaze: Move EXCEPTION_TABLE to RO_DATA segment
        ia64: Move EXCEPTION_TABLE to RO_DATA segment
        h8300: Move EXCEPTION_TABLE to RO_DATA segment
        c6x: Move EXCEPTION_TABLE to RO_DATA segment
        arm64: Move EXCEPTION_TABLE to RO_DATA segment
        alpha: Move EXCEPTION_TABLE to RO_DATA segment
        x86/vmlinux: Move EXCEPTION_TABLE to RO_DATA segment
        x86/vmlinux: Actually use _etext for the end of the text segment
        vmlinux.lds.h: Allow EXCEPTION_TABLE to live in RO_DATA
        ...
      1d872004
    • Linus Torvalds's avatar
      Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 5c4a1c09
      Linus Torvalds authored
      Pull x86 fixes from Ingo Molnar:
       "These are the fixes left over from the v5.4 cycle:
      
         - Various low level 32-bit entry code fixes and improvements by Andy
           Lutomirski, Peter Zijlstra and Thomas Gleixner.
      
         - Fix 32-bit Xen PV breakage, by Jan Beulich"
      
      * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/entry/32: Fix FIXUP_ESPFIX_STACK with user CR3
        x86/pti/32: Calculate the various PTI cpu_entry_area sizes correctly, make the CPU_ENTRY_AREA_PAGES assert precise
        selftests/x86/sigreturn/32: Invalidate DS and ES when abusing the kernel
        selftests/x86/mov_ss_trap: Fix the SYSENTER test
        x86/entry/32: Fix NMI vs ESPFIX
        x86/entry/32: Unwind the ESPFIX stack earlier on exception entry
        x86/entry/32: Move FIXUP_FRAME after pushing %fs in SAVE_ALL
        x86/entry/32: Use %ss segment where required
        x86/entry/32: Fix IRET exception
        x86/cpu_entry_area: Add guard page for entry stack on 32bit
        x86/pti/32: Size initial_page_table correctly
        x86/doublefault/32: Fix stack canaries in the double fault handler
        x86/xen/32: Simplify ring check in xen_iret_crit_fixup()
        x86/xen/32: Make xen_iret_crit_fixup() independent of frame layout
        x86/stackframe/32: Repair 32-bit Xen PV
      5c4a1c09
    • Linus Torvalds's avatar
      Merge branch 'x86-pti-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 53a07a14
      Linus Torvalds authored
      Pull x86 PTI updates from Ingo Molnar:
       "Fix reporting bugs of the MDS and TAA mitigation status, if one or
        both are set via a boot option.
      
        No change to mitigation behavior intended"
      
      * 'x86-pti-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/speculation: Fix redundant MDS mitigation message
        x86/speculation: Fix incorrect MDS/TAA mitigation status
      53a07a14
    • Linus Torvalds's avatar
      Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · da42761d
      Linus Torvalds authored
      Pull x86 platform updates from Ingo Molnar:
       "UV platform updates (with a 'hubless' variant) and Jailhouse updates
        for better UART support"
      
      * 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/jailhouse: Only enable platform UARTs if available
        x86/jailhouse: Improve setup data version comparison
        x86/platform/uv: Account for UV Hubless in is_uvX_hub Ops
        x86/platform/uv: Check EFI Boot to set reboot type
        x86/platform/uv: Decode UVsystab Info
        x86/platform/uv: Add UV Hubbed/Hubless Proc FS Files
        x86/platform/uv: Setup UV functions for Hubless UV Systems
        x86/platform/uv: Add return code to UV BIOS Init function
        x86/platform/uv: Return UV Hubless System Type
        x86/platform/uv: Save OEM_ID from ACPI MADT probe
      da42761d
    • Linus Torvalds's avatar
      Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 1c134b19
      Linus Torvalds authored
      Pull x86 mm updates from Ingo Molnar:
       "The main changes in this cycle were:
      
         - A PAT series from Davidlohr Bueso, which simplifies the memtype
           rbtree by using the interval tree helpers. (There's more cleanups
           in this area queued up, but they didn't make the merge window.)
      
         - Also flip over CONFIG_X86_5LEVEL to default-y. This might draw in a
           few more testers, as all the major distros are going to have
           5-level paging enabled by default in their next iterations.
      
         - Misc cleanups"
      
      * 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/mm/pat: Rename pat_rbtree.c to pat_interval.c
        x86/mm/pat: Drop the rbt_ prefix from external memtype calls
        x86/mm/pat: Do not pass 'rb_root' down the memtype tree helper functions
        x86/mm/pat: Convert the PAT tree to a generic interval tree
        x86/mm: Clean up the pmd_read_atomic() comments
        x86/mm: Fix function name typo in pmd_read_atomic() comment
        x86/cpu: Clean up intel_tlb_table[]
        x86/mm: Enable 5-level paging support by default
      1c134b19
    • Linus Torvalds's avatar
      Merge branch 'x86-kdump-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 24ee25a6
      Linus Torvalds authored
      Pull x86 kdump updates from Ingo Molnar:
       "This solves a kdump artifact where encrypted memory contents are
        dumped, instead of unencrypted ones.
      
        The solution also happens to simplify the kdump code, to everyone's
        delight"
      
      * 'x86-kdump-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/crash: Align function arguments on opening braces
        x86/kdump: Remove the backup region handling
        x86/kdump: Always reserve the low 1M when the crashkernel option is specified
        x86/crash: Add a forward declaration of struct kimage
      24ee25a6
    • Linus Torvalds's avatar
      Merge branch 'x86-hyperv-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 64d6a120
      Linus Torvalds authored
      Pull x86 hyperv updates from Ingo Molnar:
       "Misc updates to the hyperv guest code:
      
         - Rework clockevents initialization to better support hibernation
      
         - Allow guests to enable InvariantTSC
      
         - Micro-optimize send_ipi_one"
      
      * 'x86-hyperv-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/hyperv: Initialize clockevents earlier in CPU onlining
        x86/hyperv: Allow guests to enable InvariantTSC
        x86/hyperv: Micro-optimize send_ipi_one()
      64d6a120
    • Linus Torvalds's avatar
      Merge branch 'x86-entry-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · cd4771f7
      Linus Torvalds authored
      Pull x86 syscall entry updates from Ingo Molnar:
       "These changes relate to the preparatory cleanup of syscall function
        type signatures - to fix indirect call mismatches with Control-Flow
        Integrity (CFI) checking.
      
        No change in behavior intended"
      
      * 'x86-entry-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/mm: Use the correct function type for native_set_fixmap()
        syscalls/x86: Fix function types in COND_SYSCALL
        syscalls/x86: Use the correct function type for sys_ni_syscall
        syscalls/x86: Use COMPAT_SYSCALL_DEFINE0 for IA32 (rt_)sigreturn
        syscalls/x86: Wire up COMPAT_SYSCALL_DEFINE0
        syscalls/x86: Use the correct function type in SYSCALL_DEFINE0
      cd4771f7
    • Linus Torvalds's avatar
      Merge branches 'x86-cpu-for-linus' and 'x86-fpu-for-linus' of... · a25bbc26
      Linus Torvalds authored
      Merge branches 'x86-cpu-for-linus' and 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
      
      Pull x86 cpu and fpu updates from Ingo Molnar:
      
       - math-emu fixes
      
       - CPUID updates
      
       - sanity-check RDRAND output to see whether the CPU at least pretends
         to produce random data
      
       - various unaligned-access across cachelines fixes in preparation of
         hardware level split-lock detection
      
       - fix MAXSMP constraints to not allow !CPUMASK_OFFSTACK kernels with
         larger than 512 NR_CPUS
      
       - misc FPU related cleanups
      
      * 'x86-cpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/cpu: Align the x86_capability array to size of unsigned long
        x86/cpu: Align cpu_caps_cleared and cpu_caps_set to unsigned long
        x86/umip: Make the comments vendor-agnostic
        x86/Kconfig: Rename UMIP config parameter
        x86/Kconfig: Enforce limit of 512 CPUs with MAXSMP and no CPUMASK_OFFSTACK
        x86/cpufeatures: Add feature bit RDPRU on AMD
        x86/math-emu: Limit MATH_EMULATION to 486SX compatibles
        x86/math-emu: Check __copy_from_user() result
        x86/rdrand: Sanity-check RDRAND output
      
      * 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/fpu: Use XFEATURE_FP/SSE enum values instead of hardcoded numbers
        x86/fpu: Shrink space allocated for xstate_comp_offsets
        x86/fpu: Update stale variable name in comment
      a25bbc26
    • Linus Torvalds's avatar
      Merge branch 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 85fbf15b
      Linus Torvalds authored
      Pull x86 boot updates from Ingo Molnar:
       "The main changes were:
      
         - Extend the boot protocol to allow future extensions without hitting
           the setup_header size limit.
      
         - Add quirk to devicetree systems to disable the RTC unless it's
           listed as a supported device.
      
         - Fix ld.lld linker pedantry"
      
      * 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/boot: Introduce setup_indirect
        x86/boot: Introduce kernel_info.setup_type_max
        x86/boot: Introduce kernel_info
        x86/init: Allow DT configured systems to disable RTC at boot time
        x86/realmode: Explicitly set entry point via ENTRY in linker script
      85fbf15b
    • Linus Torvalds's avatar
      Merge branches 'core-objtool-for-linus', 'x86-cleanups-for-linus' and... · fd261590
      Linus Torvalds authored
      Merge branches 'core-objtool-for-linus', 'x86-cleanups-for-linus' and 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
      
      Pull x86 objtool, cleanup, and apic updates from Ingo Molnar:
       "Objtool:
      
         - Fix a gawk 5.0 incompatibility in gen-insn-attr-x86.awk. Most
           distros are still on gawk 4.2.x.
      
        Cleanup:
      
         - Misc cleanups, plus the removal of obsolete code such as Calgary
           IOMMU support, which code hasn't seen any real testing in a long
           time and there's no known users left.
      
        apic:
      
         - Two changes: a cleanup and a fix for an (old) race for oneshot
           threaded IRQ handlers"
      
      * 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/insn: Fix awk regexp warnings
      
      * 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86: Remove unused asm/rio.h
        x86: Fix typos in comments
        x86/pci: Remove #ifdef __KERNEL__ guard from <asm/pci.h>
        x86/pci: Remove pci_64.h
        x86: Remove the calgary IOMMU driver
        x86/apic, x86/uprobes: Correct parameter names in kernel-doc comments
        x86/kdump: Remove the unused crash_copy_backup_region()
        x86/nmi: Remove stale EDAC include leftover
      
      * 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/ioapic: Rename misnamed functions
        x86/ioapic: Prevent inconsistent state when moving an interrupt
      fd261590