]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Mar 2018 17:43:20 +0000 (18:43 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Mar 2018 17:43:20 +0000 (18:43 +0100)
added patches:
x86-boot-objtool-annotate-indirect-jump-in-secondary_startup_64.patch
x86-paravirt-objtool-annotate-indirect-calls.patch

queue-4.9/series
queue-4.9/x86-boot-objtool-annotate-indirect-jump-in-secondary_startup_64.patch [new file with mode: 0644]
queue-4.9/x86-paravirt-objtool-annotate-indirect-calls.patch [new file with mode: 0644]

index e461903ddc83bc5d52bf2f74080eb7572d8a1023..2f417f0ef1e469bb765abd3fc2ada61d28313cd7 100644 (file)
@@ -41,3 +41,5 @@ revert-x86-retpoline-simplify-vmexit_fill_rsb.patch
 x86-speculation-use-ibrs-if-available-before-calling-into-firmware.patch
 x86-retpoline-support-retpoline-builds-with-clang.patch
 x86-speculation-objtool-annotate-indirect-calls-jumps-for-objtool.patch
+x86-boot-objtool-annotate-indirect-jump-in-secondary_startup_64.patch
+x86-paravirt-objtool-annotate-indirect-calls.patch
diff --git a/queue-4.9/x86-boot-objtool-annotate-indirect-jump-in-secondary_startup_64.patch b/queue-4.9/x86-boot-objtool-annotate-indirect-jump-in-secondary_startup_64.patch
new file mode 100644 (file)
index 0000000..200c2bf
--- /dev/null
@@ -0,0 +1,51 @@
+From bd89004f6305cbf7352238f61da093207ee518d6 Mon Sep 17 00:00:00 2001
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Tue, 16 Jan 2018 10:38:09 +0100
+Subject: x86/boot, objtool: Annotate indirect jump in secondary_startup_64()
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+commit bd89004f6305cbf7352238f61da093207ee518d6 upstream.
+
+The objtool retpoline validation found this indirect jump. Seeing how
+it's on CPU bringup before we run userspace it should be safe, annotate
+it.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
+Acked-by: Thomas Gleixner <tglx@linutronix.de>
+Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
+Cc: Andy Lutomirski <luto@kernel.org>
+Cc: Arjan van de Ven <arjan@linux.intel.com>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Dan Williams <dan.j.williams@intel.com>
+Cc: Dave Hansen <dave.hansen@linux.intel.com>
+Cc: David Woodhouse <dwmw2@infradead.org>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/head_64.S |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/x86/kernel/head_64.S
++++ b/arch/x86/kernel/head_64.S
+@@ -22,6 +22,7 @@
+ #include <asm/nops.h>
+ #include "../entry/calling.h"
+ #include <asm/export.h>
++#include <asm/nospec-branch.h>
+ #ifdef CONFIG_PARAVIRT
+ #include <asm/asm-offsets.h>
+@@ -200,6 +201,7 @@ ENTRY(secondary_startup_64)
+       /* Ensure I am executing from virtual addresses */
+       movq    $1f, %rax
++      ANNOTATE_RETPOLINE_SAFE
+       jmp     *%rax
+ 1:
diff --git a/queue-4.9/x86-paravirt-objtool-annotate-indirect-calls.patch b/queue-4.9/x86-paravirt-objtool-annotate-indirect-calls.patch
new file mode 100644 (file)
index 0000000..954b7ad
--- /dev/null
@@ -0,0 +1,125 @@
+From 3010a0663fd949d122eca0561b06b0a9453f7866 Mon Sep 17 00:00:00 2001
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Wed, 17 Jan 2018 16:58:11 +0100
+Subject: x86/paravirt, objtool: Annotate indirect calls
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+commit 3010a0663fd949d122eca0561b06b0a9453f7866 upstream.
+
+Paravirt emits indirect calls which get flagged by objtool retpoline
+checks, annotate it away because all these indirect calls will be
+patched out before we start userspace.
+
+This patching happens through alternative_instructions() ->
+apply_paravirt() -> pv_init_ops.patch() which will eventually end up
+in paravirt_patch_default(). This function _will_ write direct
+alternatives.
+
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
+Acked-by: Thomas Gleixner <tglx@linutronix.de>
+Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
+Cc: Andy Lutomirski <luto@kernel.org>
+Cc: Arjan van de Ven <arjan@linux.intel.com>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Dan Williams <dan.j.williams@intel.com>
+Cc: Dave Hansen <dave.hansen@linux.intel.com>
+Cc: David Woodhouse <dwmw2@infradead.org>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/paravirt.h       |   16 ++++++++++++----
+ arch/x86/include/asm/paravirt_types.h |    5 ++++-
+ 2 files changed, 16 insertions(+), 5 deletions(-)
+
+--- a/arch/x86/include/asm/paravirt.h
++++ b/arch/x86/include/asm/paravirt.h
+@@ -6,6 +6,7 @@
+ #ifdef CONFIG_PARAVIRT
+ #include <asm/pgtable_types.h>
+ #include <asm/asm.h>
++#include <asm/nospec-branch.h>
+ #include <asm/paravirt_types.h>
+@@ -869,23 +870,27 @@ extern void default_banner(void);
+ #define INTERRUPT_RETURN                                              \
+       PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_iret), CLBR_NONE,       \
+-                jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_iret))
++                ANNOTATE_RETPOLINE_SAFE;                                      \
++                jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_iret);)
+ #define DISABLE_INTERRUPTS(clobbers)                                  \
+       PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_disable), clobbers, \
+                 PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE);            \
++                ANNOTATE_RETPOLINE_SAFE;                                      \
+                 call PARA_INDIRECT(pv_irq_ops+PV_IRQ_irq_disable);    \
+                 PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);)
+ #define ENABLE_INTERRUPTS(clobbers)                                   \
+       PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_enable), clobbers,  \
+                 PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE);            \
++                ANNOTATE_RETPOLINE_SAFE;                                      \
+                 call PARA_INDIRECT(pv_irq_ops+PV_IRQ_irq_enable);     \
+                 PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);)
+ #ifdef CONFIG_X86_32
+ #define GET_CR0_INTO_EAX                              \
+       push %ecx; push %edx;                           \
++      ANNOTATE_RETPOLINE_SAFE;                                \
+       call PARA_INDIRECT(pv_cpu_ops+PV_CPU_read_cr0); \
+       pop %edx; pop %ecx
+ #else /* !CONFIG_X86_32 */
+@@ -907,11 +912,13 @@ extern void default_banner(void);
+  */
+ #define SWAPGS                                                                \
+       PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_swapgs), CLBR_NONE,     \
+-                call PARA_INDIRECT(pv_cpu_ops+PV_CPU_swapgs)          \
++                ANNOTATE_RETPOLINE_SAFE;                                      \
++                call PARA_INDIRECT(pv_cpu_ops+PV_CPU_swapgs);         \
+                )
+ #define GET_CR2_INTO_RAX                              \
+-      call PARA_INDIRECT(pv_mmu_ops+PV_MMU_read_cr2)
++      ANNOTATE_RETPOLINE_SAFE;                                \
++      call PARA_INDIRECT(pv_mmu_ops+PV_MMU_read_cr2);
+ #define PARAVIRT_ADJUST_EXCEPTION_FRAME                                       \
+       PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_adjust_exception_frame), \
+@@ -921,7 +928,8 @@ extern void default_banner(void);
+ #define USERGS_SYSRET64                                                       \
+       PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_usergs_sysret64),       \
+                 CLBR_NONE,                                            \
+-                jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret64))
++                ANNOTATE_RETPOLINE_SAFE;                                      \
++                jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret64);)
+ #endif        /* CONFIG_X86_32 */
+ #endif /* __ASSEMBLY__ */
+--- a/arch/x86/include/asm/paravirt_types.h
++++ b/arch/x86/include/asm/paravirt_types.h
+@@ -42,6 +42,7 @@
+ #include <asm/desc_defs.h>
+ #include <asm/kmap_types.h>
+ #include <asm/pgtable_types.h>
++#include <asm/nospec-branch.h>
+ struct page;
+ struct thread_struct;
+@@ -391,7 +392,9 @@ int paravirt_disable_iospace(void);
+  * offset into the paravirt_patch_template structure, and can therefore be
+  * freely converted back into a structure offset.
+  */
+-#define PARAVIRT_CALL "call *%c[paravirt_opptr];"
++#define PARAVIRT_CALL                                 \
++      ANNOTATE_RETPOLINE_SAFE                         \
++      "call *%c[paravirt_opptr];"
+ /*
+  * These macros are intended to wrap calls through one of the paravirt