]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Jul 2018 09:17:49 +0000 (11:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Jul 2018 09:17:49 +0000 (11:17 +0200)
added patches:
compiler-gcc.h-add-__attribute__-gnu_inline-to-all-inline-declarations.patch
x86-asm-add-_asm_arg-constants-for-argument-registers-to-asm-asm.h.patch
x86-paravirt-make-native_save_fl-extern-inline.patch

queue-4.14/compiler-gcc.h-add-__attribute__-gnu_inline-to-all-inline-declarations.patch [new file with mode: 0644]
queue-4.14/series
queue-4.14/x86-asm-add-_asm_arg-constants-for-argument-registers-to-asm-asm.h.patch [new file with mode: 0644]
queue-4.14/x86-paravirt-make-native_save_fl-extern-inline.patch [new file with mode: 0644]
queue-4.17/series [new file with mode: 0644]

diff --git a/queue-4.14/compiler-gcc.h-add-__attribute__-gnu_inline-to-all-inline-declarations.patch b/queue-4.14/compiler-gcc.h-add-__attribute__-gnu_inline-to-all-inline-declarations.patch
new file mode 100644 (file)
index 0000000..ff02702
--- /dev/null
@@ -0,0 +1,121 @@
+From d03db2bc26f0e4a6849ad649a09c9c73fccdc656 Mon Sep 17 00:00:00 2001
+From: Nick Desaulniers <ndesaulniers@google.com>
+Date: Thu, 21 Jun 2018 09:23:22 -0700
+Subject: compiler-gcc.h: Add __attribute__((gnu_inline)) to all inline declarations
+
+From: Nick Desaulniers <ndesaulniers@google.com>
+
+commit d03db2bc26f0e4a6849ad649a09c9c73fccdc656 upstream.
+
+Functions marked extern inline do not emit an externally visible
+function when the gnu89 C standard is used. Some KBUILD Makefiles
+overwrite KBUILD_CFLAGS. This is an issue for GCC 5.1+ users as without
+an explicit C standard specified, the default is gnu11. Since c99, the
+semantics of extern inline have changed such that an externally visible
+function is always emitted. This can lead to multiple definition errors
+of extern inline functions at link time of compilation units whose build
+files have removed an explicit C standard compiler flag for users of GCC
+5.1+ or Clang.
+
+Suggested-by: Arnd Bergmann <arnd@arndb.de>
+Suggested-by: H. Peter Anvin <hpa@zytor.com>
+Suggested-by: Joe Perches <joe@perches.com>
+Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
+Acked-by: Juergen Gross <jgross@suse.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: acme@redhat.com
+Cc: akataria@vmware.com
+Cc: akpm@linux-foundation.org
+Cc: andrea.parri@amarulasolutions.com
+Cc: ard.biesheuvel@linaro.org
+Cc: aryabinin@virtuozzo.com
+Cc: astrachan@google.com
+Cc: boris.ostrovsky@oracle.com
+Cc: brijesh.singh@amd.com
+Cc: caoj.fnst@cn.fujitsu.com
+Cc: geert@linux-m68k.org
+Cc: ghackmann@google.com
+Cc: gregkh@linuxfoundation.org
+Cc: jan.kiszka@siemens.com
+Cc: jarkko.sakkinen@linux.intel.com
+Cc: jpoimboe@redhat.com
+Cc: keescook@google.com
+Cc: kirill.shutemov@linux.intel.com
+Cc: kstewart@linuxfoundation.org
+Cc: linux-efi@vger.kernel.org
+Cc: linux-kbuild@vger.kernel.org
+Cc: manojgupta@google.com
+Cc: mawilcox@microsoft.com
+Cc: michal.lkml@markovi.net
+Cc: mjg59@google.com
+Cc: mka@chromium.org
+Cc: pombredanne@nexb.com
+Cc: rientjes@google.com
+Cc: rostedt@goodmis.org
+Cc: sedat.dilek@gmail.com
+Cc: thomas.lendacky@amd.com
+Cc: tstellar@redhat.com
+Cc: tweek@google.com
+Cc: virtualization@lists.linux-foundation.org
+Cc: will.deacon@arm.com
+Cc: yamada.masahiro@socionext.com
+Link: http://lkml.kernel.org/r/20180621162324.36656-2-ndesaulniers@google.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/compiler-gcc.h |   29 ++++++++++++++++++++++-------
+ 1 file changed, 22 insertions(+), 7 deletions(-)
+
+--- a/include/linux/compiler-gcc.h
++++ b/include/linux/compiler-gcc.h
+@@ -66,25 +66,40 @@
+ #endif
+ /*
++ * Feature detection for gnu_inline (gnu89 extern inline semantics). Either
++ * __GNUC_STDC_INLINE__ is defined (not using gnu89 extern inline semantics,
++ * and we opt in to the gnu89 semantics), or __GNUC_STDC_INLINE__ is not
++ * defined so the gnu89 semantics are the default.
++ */
++#ifdef __GNUC_STDC_INLINE__
++# define __gnu_inline __attribute__((gnu_inline))
++#else
++# define __gnu_inline
++#endif
++
++/*
+  * Force always-inline if the user requests it so via the .config,
+  * or if gcc is too old.
+  * GCC does not warn about unused static inline functions for
+  * -Wunused-function.  This turns out to avoid the need for complex #ifdef
+  * directives.  Suppress the warning in clang as well by using "unused"
+  * function attribute, which is redundant but not harmful for gcc.
++ * Prefer gnu_inline, so that extern inline functions do not emit an
++ * externally visible function. This makes extern inline behave as per gnu89
++ * semantics rather than c99. This prevents multiple symbol definition errors
++ * of extern inline functions at link time.
++ * A lot of inline functions can cause havoc with function tracing.
+  */
+ #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) ||              \
+     !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
+-#define inline inline         __attribute__((always_inline,unused)) notrace
+-#define __inline__ __inline__ __attribute__((always_inline,unused)) notrace
+-#define __inline __inline     __attribute__((always_inline,unused)) notrace
++#define inline \
++      inline __attribute__((always_inline, unused)) notrace __gnu_inline
+ #else
+-/* A lot of inline functions can cause havoc with function tracing */
+-#define inline inline         __attribute__((unused)) notrace
+-#define __inline__ __inline__ __attribute__((unused)) notrace
+-#define __inline __inline     __attribute__((unused)) notrace
++#define inline inline         __attribute__((unused)) notrace __gnu_inline
+ #endif
++#define __inline__ inline
++#define __inline inline
+ #define __always_inline       inline __attribute__((always_inline))
+ #define  noinline     __attribute__((noinline))
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8c904802856ccfc29120dbf58210f1ca19401f20 100644 (file)
@@ -0,0 +1,3 @@
+compiler-gcc.h-add-__attribute__-gnu_inline-to-all-inline-declarations.patch
+x86-asm-add-_asm_arg-constants-for-argument-registers-to-asm-asm.h.patch
+x86-paravirt-make-native_save_fl-extern-inline.patch
diff --git a/queue-4.14/x86-asm-add-_asm_arg-constants-for-argument-registers-to-asm-asm.h.patch b/queue-4.14/x86-asm-add-_asm_arg-constants-for-argument-registers-to-asm-asm.h.patch
new file mode 100644 (file)
index 0000000..f951ce6
--- /dev/null
@@ -0,0 +1,134 @@
+From 0e2e160033283e20f688d8bad5b89460cc5bfcc4 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@linux.intel.com>
+Date: Thu, 21 Jun 2018 09:23:23 -0700
+Subject: x86/asm: Add _ASM_ARG* constants for argument registers to <asm/asm.h>
+
+From: H. Peter Anvin <hpa@linux.intel.com>
+
+commit 0e2e160033283e20f688d8bad5b89460cc5bfcc4 upstream.
+
+i386 and x86-64 uses different registers for arguments; make them
+available so we don't have to #ifdef in the actual code.
+
+Native size and specified size (q, l, w, b) versions are provided.
+
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
+Reviewed-by: Sedat Dilek <sedat.dilek@gmail.com>
+Acked-by: Juergen Gross <jgross@suse.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: acme@redhat.com
+Cc: akataria@vmware.com
+Cc: akpm@linux-foundation.org
+Cc: andrea.parri@amarulasolutions.com
+Cc: ard.biesheuvel@linaro.org
+Cc: arnd@arndb.de
+Cc: aryabinin@virtuozzo.com
+Cc: astrachan@google.com
+Cc: boris.ostrovsky@oracle.com
+Cc: brijesh.singh@amd.com
+Cc: caoj.fnst@cn.fujitsu.com
+Cc: geert@linux-m68k.org
+Cc: ghackmann@google.com
+Cc: gregkh@linuxfoundation.org
+Cc: jan.kiszka@siemens.com
+Cc: jarkko.sakkinen@linux.intel.com
+Cc: joe@perches.com
+Cc: jpoimboe@redhat.com
+Cc: keescook@google.com
+Cc: kirill.shutemov@linux.intel.com
+Cc: kstewart@linuxfoundation.org
+Cc: linux-efi@vger.kernel.org
+Cc: linux-kbuild@vger.kernel.org
+Cc: manojgupta@google.com
+Cc: mawilcox@microsoft.com
+Cc: michal.lkml@markovi.net
+Cc: mjg59@google.com
+Cc: mka@chromium.org
+Cc: pombredanne@nexb.com
+Cc: rientjes@google.com
+Cc: rostedt@goodmis.org
+Cc: thomas.lendacky@amd.com
+Cc: tstellar@redhat.com
+Cc: tweek@google.com
+Cc: virtualization@lists.linux-foundation.org
+Cc: will.deacon@arm.com
+Cc: yamada.masahiro@socionext.com
+Link: http://lkml.kernel.org/r/20180621162324.36656-3-ndesaulniers@google.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/asm.h |   59 +++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 59 insertions(+)
+
+--- a/arch/x86/include/asm/asm.h
++++ b/arch/x86/include/asm/asm.h
+@@ -46,6 +46,65 @@
+ #define _ASM_SI               __ASM_REG(si)
+ #define _ASM_DI               __ASM_REG(di)
++#ifndef __x86_64__
++/* 32 bit */
++
++#define _ASM_ARG1     _ASM_AX
++#define _ASM_ARG2     _ASM_DX
++#define _ASM_ARG3     _ASM_CX
++
++#define _ASM_ARG1L    eax
++#define _ASM_ARG2L    edx
++#define _ASM_ARG3L    ecx
++
++#define _ASM_ARG1W    ax
++#define _ASM_ARG2W    dx
++#define _ASM_ARG3W    cx
++
++#define _ASM_ARG1B    al
++#define _ASM_ARG2B    dl
++#define _ASM_ARG3B    cl
++
++#else
++/* 64 bit */
++
++#define _ASM_ARG1     _ASM_DI
++#define _ASM_ARG2     _ASM_SI
++#define _ASM_ARG3     _ASM_DX
++#define _ASM_ARG4     _ASM_CX
++#define _ASM_ARG5     r8
++#define _ASM_ARG6     r9
++
++#define _ASM_ARG1Q    rdi
++#define _ASM_ARG2Q    rsi
++#define _ASM_ARG3Q    rdx
++#define _ASM_ARG4Q    rcx
++#define _ASM_ARG5Q    r8
++#define _ASM_ARG6Q    r9
++
++#define _ASM_ARG1L    edi
++#define _ASM_ARG2L    esi
++#define _ASM_ARG3L    edx
++#define _ASM_ARG4L    ecx
++#define _ASM_ARG5L    r8d
++#define _ASM_ARG6L    r9d
++
++#define _ASM_ARG1W    di
++#define _ASM_ARG2W    si
++#define _ASM_ARG3W    dx
++#define _ASM_ARG4W    cx
++#define _ASM_ARG5W    r8w
++#define _ASM_ARG6W    r9w
++
++#define _ASM_ARG1B    dil
++#define _ASM_ARG2B    sil
++#define _ASM_ARG3B    dl
++#define _ASM_ARG4B    cl
++#define _ASM_ARG5B    r8b
++#define _ASM_ARG6B    r9b
++
++#endif
++
+ /*
+  * Macros to generate condition code outputs from inline assembly,
+  * The output operand must be type "bool".
diff --git a/queue-4.14/x86-paravirt-make-native_save_fl-extern-inline.patch b/queue-4.14/x86-paravirt-make-native_save_fl-extern-inline.patch
new file mode 100644 (file)
index 0000000..9ec2b44
--- /dev/null
@@ -0,0 +1,149 @@
+From d0a8d9378d16eb3c69bd8e6d23779fbdbee3a8c7 Mon Sep 17 00:00:00 2001
+From: Nick Desaulniers <ndesaulniers@google.com>
+Date: Thu, 21 Jun 2018 09:23:24 -0700
+Subject: x86/paravirt: Make native_save_fl() extern inline
+
+From: Nick Desaulniers <ndesaulniers@google.com>
+
+commit d0a8d9378d16eb3c69bd8e6d23779fbdbee3a8c7 upstream.
+
+native_save_fl() is marked static inline, but by using it as
+a function pointer in arch/x86/kernel/paravirt.c, it MUST be outlined.
+
+paravirt's use of native_save_fl() also requires that no GPRs other than
+%rax are clobbered.
+
+Compilers have different heuristics which they use to emit stack guard
+code, the emittance of which can break paravirt's callee saved assumption
+by clobbering %rcx.
+
+Marking a function definition extern inline means that if this version
+cannot be inlined, then the out-of-line version will be preferred. By
+having the out-of-line version be implemented in assembly, it cannot be
+instrumented with a stack protector, which might violate custom calling
+conventions that code like paravirt rely on.
+
+The semantics of extern inline has changed since gnu89. This means that
+folks using GCC versions >= 5.1 may see symbol redefinition errors at
+link time for subdirs that override KBUILD_CFLAGS (making the C standard
+used implicit) regardless of this patch. This has been cleaned up
+earlier in the patch set, but is left as a note in the commit message
+for future travelers.
+
+Reports:
+ https://lkml.org/lkml/2018/5/7/534
+ https://github.com/ClangBuiltLinux/linux/issues/16
+
+Discussion:
+ https://bugs.llvm.org/show_bug.cgi?id=37512
+ https://lkml.org/lkml/2018/5/24/1371
+
+Thanks to the many folks that participated in the discussion.
+
+Debugged-by: Alistair Strachan <astrachan@google.com>
+Debugged-by: Matthias Kaehlcke <mka@chromium.org>
+Suggested-by: Arnd Bergmann <arnd@arndb.de>
+Suggested-by: H. Peter Anvin <hpa@zytor.com>
+Suggested-by: Tom Stellar <tstellar@redhat.com>
+Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
+Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
+Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
+Acked-by: Juergen Gross <jgross@suse.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: acme@redhat.com
+Cc: akataria@vmware.com
+Cc: akpm@linux-foundation.org
+Cc: andrea.parri@amarulasolutions.com
+Cc: ard.biesheuvel@linaro.org
+Cc: aryabinin@virtuozzo.com
+Cc: astrachan@google.com
+Cc: boris.ostrovsky@oracle.com
+Cc: brijesh.singh@amd.com
+Cc: caoj.fnst@cn.fujitsu.com
+Cc: geert@linux-m68k.org
+Cc: ghackmann@google.com
+Cc: gregkh@linuxfoundation.org
+Cc: jan.kiszka@siemens.com
+Cc: jarkko.sakkinen@linux.intel.com
+Cc: joe@perches.com
+Cc: jpoimboe@redhat.com
+Cc: keescook@google.com
+Cc: kirill.shutemov@linux.intel.com
+Cc: kstewart@linuxfoundation.org
+Cc: linux-efi@vger.kernel.org
+Cc: linux-kbuild@vger.kernel.org
+Cc: manojgupta@google.com
+Cc: mawilcox@microsoft.com
+Cc: michal.lkml@markovi.net
+Cc: mjg59@google.com
+Cc: mka@chromium.org
+Cc: pombredanne@nexb.com
+Cc: rientjes@google.com
+Cc: rostedt@goodmis.org
+Cc: thomas.lendacky@amd.com
+Cc: tweek@google.com
+Cc: virtualization@lists.linux-foundation.org
+Cc: will.deacon@arm.com
+Cc: yamada.masahiro@socionext.com
+Link: http://lkml.kernel.org/r/20180621162324.36656-4-ndesaulniers@google.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/irqflags.h |    2 +-
+ arch/x86/kernel/Makefile        |    1 +
+ arch/x86/kernel/irqflags.S      |   26 ++++++++++++++++++++++++++
+ 3 files changed, 28 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/include/asm/irqflags.h
++++ b/arch/x86/include/asm/irqflags.h
+@@ -13,7 +13,7 @@
+  * Interrupt control:
+  */
+-static inline unsigned long native_save_fl(void)
++extern inline unsigned long native_save_fl(void)
+ {
+       unsigned long flags;
+--- a/arch/x86/kernel/Makefile
++++ b/arch/x86/kernel/Makefile
+@@ -58,6 +58,7 @@ obj-y                        += alternative.o i8253.o pci-nom
+ obj-y                 += tsc.o tsc_msr.o io_delay.o rtc.o
+ obj-y                 += pci-iommu_table.o
+ obj-y                 += resource.o
++obj-y                 += irqflags.o
+ obj-y                         += process.o
+ obj-y                         += fpu/
+--- /dev/null
++++ b/arch/x86/kernel/irqflags.S
+@@ -0,0 +1,26 @@
++/* SPDX-License-Identifier: GPL-2.0 */
++
++#include <asm/asm.h>
++#include <asm/export.h>
++#include <linux/linkage.h>
++
++/*
++ * unsigned long native_save_fl(void)
++ */
++ENTRY(native_save_fl)
++      pushf
++      pop %_ASM_AX
++      ret
++ENDPROC(native_save_fl)
++EXPORT_SYMBOL(native_save_fl)
++
++/*
++ * void native_restore_fl(unsigned long flags)
++ * %eax/%rdi: flags
++ */
++ENTRY(native_restore_fl)
++      push %_ASM_ARG1
++      popf
++      ret
++ENDPROC(native_restore_fl)
++EXPORT_SYMBOL(native_restore_fl)
diff --git a/queue-4.17/series b/queue-4.17/series
new file mode 100644 (file)
index 0000000..8c90480
--- /dev/null
@@ -0,0 +1,3 @@
+compiler-gcc.h-add-__attribute__-gnu_inline-to-all-inline-declarations.patch
+x86-asm-add-_asm_arg-constants-for-argument-registers-to-asm-asm.h.patch
+x86-paravirt-make-native_save_fl-extern-inline.patch