Linux 5.4.252
Greg Kroah-Hartman
maintainer-----------------
Note, PLEASE TEST this kernel if you are on the 5.4.y tree before using it in a real workload. This was a quick release due to the obvious security fixes in it, and as such, it has not had very much testing "in the wild". Please let us know of any problems seen. Also note that the user/kernel api for the new security mitigations might be changing over time, so do not get used to them being fixed in stone just yet.
-----------------
I'm announcing the release of the 5.4.252 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/ABI/testing/sysfs-devices-system-cpu | 11 Documentation/admin-guide/hw-vuln/gather_data_sampling.rst | 109 ++++++ Documentation/admin-guide/hw-vuln/index.rst | 1 Documentation/admin-guide/kernel-parameters.txt | 39 +- Makefile | 2 arch/Kconfig | 3 arch/alpha/include/asm/bugs.h | 20 - arch/arm/Kconfig | 1 arch/arm/include/asm/bugs.h | 4 arch/arm/kernel/bugs.c | 3 arch/ia64/Kconfig | 1 arch/ia64/include/asm/bugs.h | 20 - arch/ia64/kernel/setup.c | 3 arch/m68k/Kconfig | 1 arch/m68k/include/asm/bugs.h | 21 - arch/m68k/kernel/setup_mm.c | 3 arch/mips/Kconfig | 1 arch/mips/include/asm/bugs.h | 17 - arch/mips/kernel/setup.c | 13 arch/parisc/include/asm/bugs.h | 20 - arch/powerpc/include/asm/bugs.h | 15 arch/sh/Kconfig | 1 arch/sh/include/asm/bugs.h | 78 ---- arch/sh/include/asm/processor.h | 2 arch/sh/kernel/idle.c | 1 arch/sh/kernel/setup.c | 55 +++ arch/sparc/Kconfig | 1 arch/sparc/include/asm/bugs.h | 18 - arch/sparc/kernel/setup_32.c | 7 arch/um/Kconfig | 1 arch/um/include/asm/bugs.h | 7 arch/um/kernel/um_arch.c | 3 arch/x86/Kconfig | 20 + arch/x86/include/asm/bugs.h | 2 arch/x86/include/asm/cpufeature.h | 10 arch/x86/include/asm/cpufeatures.h | 18 - arch/x86/include/asm/disabled-features.h | 4 arch/x86/include/asm/fpu/internal.h | 2 arch/x86/include/asm/mem_encrypt.h | 2 arch/x86/include/asm/msr-index.h | 12 arch/x86/include/asm/required-features.h | 4 arch/x86/kernel/cpu/amd.c | 3 arch/x86/kernel/cpu/bugs.c | 209 +++++++++---- arch/x86/kernel/cpu/common.c | 122 ++++++- arch/x86/kernel/cpu/cpu.h | 2 arch/x86/kernel/cpu/scattered.c | 3 arch/x86/kernel/fpu/init.c | 8 arch/x86/kernel/smpboot.c | 1 arch/x86/kvm/cpuid.h | 1 arch/x86/kvm/x86.c | 5 arch/x86/mm/init.c | 7 arch/x86/xen/smp_pv.c | 2 arch/xtensa/include/asm/bugs.h | 18 - drivers/base/cpu.c | 8 drivers/net/xen-netback/netback.c | 15 include/asm-generic/bugs.h | 11 include/linux/cpu.h | 6 include/linux/sched/task.h | 2 init/main.c | 21 - kernel/fork.c | 37 +- tools/arch/x86/include/asm/cpufeatures.h | 18 - tools/arch/x86/include/asm/disabled-features.h | 3 tools/arch/x86/include/asm/required-features.h | 3 63 files changed, 659 insertions(+), 402 deletions(-)
Arnaldo Carvalho de Melo (1):
tools headers cpufeatures: Sync with the kernel sources
Borislav Petkov (AMD) (1):
x86/bugs: Increase the x86 bugs vector size to two u32s
Daniel Sneddon (4):
x86/speculation: Add Gather Data Sampling mitigation x86/speculation: Add force option to GDS mitigation x86/speculation: Add Kconfig option for GDS
KVM: Add GDS_NO support to KVM
Dave Hansen (1):
Documentation/x86: Fix backwards on/off logic about YMM support
Greg Kroah-Hartman (2):
x86: fix backwards merge of GDS/SRSO bit
Linux 5.4.252
Juergen Gross (2):
x86/xen: Fix secondary processors' FPU initialization x86/mm: fix poking_init() for Xen PV guests
Kim Phillips (1):
x86/cpu, kvm: Add support for CPUID_80000021_EAX
Peter Zijlstra (3):
x86/mm: Use mm_alloc() in poking_init()
mm: Move mm_cachep initialization to mm_init() x86/mm: Initialize text poking earlier
Ross Lagerwall (1):
xen/netback: Fix buffer overrun triggered by unusual packet
Sean Christopherson (1):
x86/cpufeatures: Assign dedicated feature word for CPUID_0x8000001F[EAX]
Thomas Gleixner (15):
init: Provide arch_cpu_finalize_init()
x86/cpu: Switch to arch_cpu_finalize_init()
ARM: cpu: Switch to arch_cpu_finalize_init() ia64/cpu: Switch to arch_cpu_finalize_init() m68k/cpu: Switch to arch_cpu_finalize_init() mips/cpu: Switch to arch_cpu_finalize_init()
sh/cpu: Switch to arch_cpu_finalize_init()
sparc/cpu: Switch to arch_cpu_finalize_init()
um/cpu: Switch to arch_cpu_finalize_init()
init: Remove check_bugs() leftovers
init: Invoke arch_cpu_finalize_init() earlier
init, x86: Move mem_encrypt_init() into arch_cpu_finalize_init() x86/fpu: Remove cpuinfo argument from init functions x86/fpu: Mark init functions __init
x86/fpu: Move FPU initialization into arch_cpu_finalize_init()
Tom Lendacky (2):
x86/cpufeatures: Add SEV-ES CPU feature
x86/cpu: Add VM page flush MSR availablility as a CPUID feature
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-devices-system-cpu +6 -5
@@ -480,16 +480,17 @@ Description: information about CPUs heterogeneity. cpu_capacity: capacity of cpu#. What: /sys/devices/system/cpu/vulnerabilities + /sys/devices/system/cpu/vulnerabilities/gather_data_sampling + /sys/devices/system/cpu/vulnerabilities/itlb_multihit + /sys/devices/system/cpu/vulnerabilities/l1tf + /sys/devices/system/cpu/vulnerabilities/mds /sys/devices/system/cpu/vulnerabilities/meltdown + /sys/devices/system/cpu/vulnerabilities/mmio_stale_data + /sys/devices/system/cpu/vulnerabilities/spec_store_bypass /sys/devices/system/cpu/vulnerabilities/spectre_v1 /sys/devices/system/cpu/vulnerabilities/spectre_v2 - /sys/devices/system/cpu/vulnerabilities/spec_store_bypass - /sys/devices/system/cpu/vulnerabilities/l1tf - /sys/devices/system/cpu/vulnerabilities/mds /sys/devices/system/cpu/vulnerabilities/srbds /sys/devices/system/cpu/vulnerabilities/tsx_async_abort - /sys/devices/system/cpu/vulnerabilities/itlb_multihit - /sys/devices/system/cpu/vulnerabilities/mmio_stale_data Date: January 2018 Contact: Linux kernel mailing list <[email protected]> Description: Information about CPU vulnerabilities
Documentation/admin-guide/hw-vuln/gather_data_sampling.rst new file +109 -0
109 lines not on this page · raw message
Documentation/admin-guide/hw-vuln/index.rst +1 -0
@@ -16,3 +16,4 @@ are configurable at compile, boot or run time. multihit.rst special-register-buffer-data-sampling.rst processor_mmio_stale_data.rst + gather_data_sampling.rst
Documentation/admin-guide/kernel-parameters.txt +30 -9
@@ -1336,6 +1336,26 @@ Format: off | on default: on + gather_data_sampling= + [X86,INTEL] Control the Gather Data Sampling (GDS) + mitigation. + + Gather Data Sampling is a hardware vulnerability which + allows unprivileged speculative access to data which was + previously stored in vector registers. + + This issue is mitigated by default in updated microcode. + The mitigation may have a performance impact but can be + disabled. On systems without the microcode mitigation + disabling AVX serves as a mitigation. + + force: Disable AVX to mitigate systems without + microcode mitigation. No effect if the microcode + mitigation is present. Known to cause crashes in + userspace with buggy AVX enumeration. + + off: Disable GDS mitigation. + gcov_persist= [GCOV] When non-zero (default), profiling data for kernel modules is saved and remains accessible via debugfs, even when the module is unloaded/reloaded.
@@ -2696,21 +2716,22 @@ Disable all optional CPU mitigations. This improves system performance, but it may also expose users to several CPU vulnerabilities. - Equivalent to: nopti [X86,PPC] + Equivalent to: gather_data_sampling=off [X86] kpti=0 [ARM64] - nospectre_v1 [X86,PPC] + kvm.nx_huge_pages=off [X86] + l1tf=off [X86] + mds=off [X86] + mmio_stale_data=off [X86] + no_entry_flush [PPC] + no_uaccess_flush [PPC] nobp=0 [S390] + nopti [X86,PPC] + nospectre_v1 [X86,PPC] nospectre_v2 [X86,PPC,S390,ARM64] - spectre_v2_user=off [X86] spec_store_bypass_disable=off [X86,PPC] + spectre_v2_user=off [X86] ssbd=force-off [ARM64] - l1tf=off [X86] - mds=off [X86] tsx_async_abort=off [X86] - kvm.nx_huge_pages=off [X86] - no_entry_flush [PPC] - no_uaccess_flush [PPC] - mmio_stale_data=off [X86] Exceptions: This does not have any effect on
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 251 +SUBLEVEL = 252 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/Kconfig +3 -0
@@ -271,6 +271,9 @@ config ARCH_HAS_UNCACHED_SEGMENT select ARCH_HAS_DMA_PREP_COHERENT bool +config ARCH_HAS_CPU_FINALIZE_INIT + bool + # Select if arch init_task must go in the __init_task_data section config ARCH_TASK_STRUCT_ON_STACK bool
arch/alpha/include/asm/bugs.h deleted +0 -20
@@ -1,20 +0,0 @@ -/* -* include/asm-alpha/bugs.h -* -* Copyright (C) 1994 Linus Torvalds -*/ - -/* -* This is included by init/main.c to check for architecture-dependent bugs. -* -* Needs: -* void check_bugs(void); -*/ - -/* -* I don't know of any alpha bugs yet.. Nice chip -*/ - -static void check_bugs (void ) -{ -}
arch/arm/Kconfig +1 -0
@@ -5,6 +5,7 @@ config ARM select ARCH_32BIT_OFF_T select ARCH_CLOCKSOURCE_DATA select ARCH_HAS_BINFMT_FLAT + select ARCH_HAS_CPU_FINALIZE_INIT if MMU select ARCH_HAS_DEBUG_VIRTUAL if MMU select ARCH_HAS_DEVMEM_IS_ALLOWED select ARCH_HAS_DMA_COHERENT_TO_PFN if SWIOTLB
arch/arm/include/asm/bugs.h +0 -4
@@ -1,7 +1,5 @@/* SPDX-License-Identifier: GPL-2.0-only */ /* -* arch/arm/include/asm/bugs.h -* * Copyright (C) 1995-2003 Russell King */ #ifndef __ASM_BUGS_H
@@ -10,10 +8,8 @@extern void check_writebuffer_bugs (void );#ifdef CONFIG_MMU -extern void check_bugs (void );extern void check_other_bugs (void );#else -#define check_bugs () do { } while (0)#define check_other_bugs () do { } while (0)#endif
arch/arm/kernel/bugs.c +2 -1
@@ -1,5 +1,6 @@// SPDX-License-Identifier: GPL-2.0 #include <linux/init.h> +#include <linux/cpu.h> #include <asm/bugs.h> #include <asm/proc-fns.h>
@@ -11,7 +12,7 @@ void check_other_bugs(void)#endif } -void __init check_bugs (void ) +void __init arch_cpu_finalize_init (void ) {check_writebuffer_bugs ();check_other_bugs ();
arch/ia64/Kconfig +1 -0
@@ -8,6 +8,7 @@ menu "Processor type and features" config IA64 bool + select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_SERIO select ACPI
arch/ia64/include/asm/bugs.h deleted +0 -20
@@ -1,20 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* -* This is included by init/main.c to check for architecture-dependent bugs. -* -* Needs: -* void check_bugs(void); -* -* Based on <asm-alpha/bugs.h>. -* -* Modified 1998, 1999, 2003 -* David Mosberger-Tang <[email protected]>, Hewlett-Packard Co. -*/ -#ifndef _ASM_IA64_BUGS_H -#define _ASM_IA64_BUGS_H - -#include <asm/processor.h> - -extern void check_bugs (void ); - -#endif /* _ASM_IA64_BUGS_H */
arch/ia64/kernel/setup.c +1 -2
@@ -1073,8 +1073,7 @@ cpu_init (void) } } -void __init -check_bugs (void ) +void __init arch_cpu_finalize_init (void ) {ia64_patch_mckinley_e9 ((unsigned long ) __start___mckinley_e9_bundles, (unsigned long ) __end___mckinley_e9_bundles);
arch/m68k/Kconfig +1 -0
@@ -4,6 +4,7 @@ config M68K default y select ARCH_32BIT_OFF_T select ARCH_HAS_BINFMT_FLAT + select ARCH_HAS_CPU_FINALIZE_INIT if MMU select ARCH_HAS_DMA_PREP_COHERENT if HAS_DMA && MMU && !COLDFIRE select ARCH_HAS_SYNC_DMA_FOR_DEVICE if HAS_DMA select ARCH_MIGHT_HAVE_PC_PARPORT if ISA
arch/m68k/include/asm/bugs.h deleted +0 -21
@@ -1,21 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* -* include/asm-m68k/bugs.h -* -* Copyright (C) 1994 Linus Torvalds -*/ - -/* -* This is included by init/main.c to check for architecture-dependent bugs. -* -* Needs: -* void check_bugs(void); -*/ - -#ifdef CONFIG_MMU -extern void check_bugs (void );/* in arch/m68k/kernel/setup.c */ -#else -static void check_bugs (void ) -{ -} -#endif
arch/m68k/kernel/setup_mm.c +2 -1
@@ -10,6 +10,7 @@*/ #include <linux/kernel.h> +#include <linux/cpu.h> #include <linux/mm.h> #include <linux/sched.h> #include <linux/delay.h>
@@ -527,7 +528,7 @@ static int __init proc_hardware_init(void)module_init (proc_hardware_init);#endif -void check_bugs (void ) +void __init arch_cpu_finalize_init (void ) {#if defined(CONFIG_FPU ) && !defined(CONFIG_M68KFPU_EMU )if (m68k_fputype ==0 ) {
arch/mips/Kconfig +1 -0
@@ -5,6 +5,7 @@ config MIPS select ARCH_32BIT_OFF_T if !64BIT select ARCH_BINFMT_ELF_STATE if MIPS_FP_SUPPORT select ARCH_CLOCKSOURCE_DATA + select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_HAS_UBSAN_SANITIZE_ALL select ARCH_SUPPORTS_UPROBES
arch/mips/include/asm/bugs.h +0 -17
@@ -1,17 +1,11 @@/* SPDX-License-Identifier: GPL-2.0 */ /* -* This is included by init/main.c to check for architecture-dependent bugs. -* * Copyright (C) 2007 Maciej W. Rozycki -* -* Needs: -* void check_bugs(void); */ #ifndef _ASM_BUGS_H#define _ASM_BUGS_H#include <linux/bug.h> -#include <linux/delay.h> #include <linux/smp.h> #include <asm/cpu.h>
@@ -31,17 +25,6 @@ static inline void check_bugs_early(void)#endif } -static inline void check_bugs (void ) -{ -unsigned int cpu =smp_processor_id (); - - cpu_data[cpu].udelay_val = loops_per_jiffy; -check_bugs32 (); -#ifdef CONFIG_64BIT -check_bugs64 (); -#endif -} -static inline int r4k_daddiu_bug (void ) {#ifdef CONFIG_64BIT
arch/mips/kernel/setup.c +13 -0
@@ -11,6 +11,8 @@* Copyright (C) 2000, 2001, 2002, 2007 Maciej W. Rozycki */ #include <linux/init.h> +#include <linux/cpu.h> +#include <linux/delay.h> #include <linux/ioport.h> #include <linux/export.h> #include <linux/screen_info.h>
@@ -812,3 +814,14 @@ static int __init setnocoherentio(char *str) }early_param ("nocoherentio" , setnocoherentio);#endif + +void __init arch_cpu_finalize_init (void ) +{ +unsigned int cpu =smp_processor_id (); + + cpu_data[cpu].udelay_val = loops_per_jiffy; +check_bugs32 (); + +if (IS_ENABLED (CONFIG_CPU_R4X00_BUGS64 )) +check_bugs64 (); +}
arch/parisc/include/asm/bugs.h deleted +0 -20
@@ -1,20 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* -* include/asm-parisc/bugs.h -* -* Copyright (C) 1999 Mike Shaver -*/ - -/* -* This is included by init/main.c to check for architecture-dependent bugs. -* -* Needs: -* void check_bugs(void); -*/ - -#include <asm/processor.h> - -static inline void check_bugs (void ) -{ -// identify_cpu(&boot_cpu_data); -}
arch/powerpc/include/asm/bugs.h deleted +0 -15
@@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -#ifndef _ASM_POWERPC_BUGS_H -#define _ASM_POWERPC_BUGS_H - -/* -*/ - -/* -* This file is included by 'init/main.c' to check for -* architecture-dependent bugs. -*/ - -static inline void check_bugs (void ) { } - -#endif /* _ASM_POWERPC_BUGS_H */
arch/sh/Kconfig +1 -0
@@ -2,6 +2,7 @@ config SUPERH def_bool y select ARCH_HAS_BINFMT_FLAT if !MMU + select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_MIGHT_HAVE_PC_PARPORT
arch/sh/include/asm/bugs.h deleted +0 -78
78 lines not on this page · raw message
arch/sh/include/asm/processor.h +2 -0
@@ -173,6 +173,8 @@ extern unsigned int instruction_size(unsigned int insn);#define instruction_size (insn) (4)#endif +void select_idle_routine (void ); +#endif /* __ASSEMBLY__ */ #ifdef CONFIG_SUPERH32
arch/sh/kernel/idle.c +1 -0
@@ -15,6 +15,7 @@#include <linux/smp.h> #include <linux/atomic.h> #include <asm/pgalloc.h> +#include <asm/processor.h> #include <asm/smp.h> #include <asm/bl_bit.h>
arch/sh/kernel/setup.c +55 -0
64 lines not on this page · raw message
arch/sparc/Kconfig +1 -0
@@ -52,6 +52,7 @@ config SPARC config SPARC32 def_bool !64BIT select ARCH_32BIT_OFF_T + select ARCH_HAS_CPU_FINALIZE_INIT if !SMP select ARCH_HAS_SYNC_DMA_FOR_CPU select GENERIC_ATOMIC64 select CLZ_TAB
arch/sparc/include/asm/bugs.h deleted +0 -18
@@ -1,18 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* include/asm/bugs.h: Sparc probes for various bugs. -* -* Copyright (C) 1996, 2007 David S. Miller ([email protected]) -*/ - -#ifdef CONFIG_SPARC32 -#include <asm/cpudata.h> -#endif - -extern unsigned long loops_per_jiffy; - -static void __init check_bugs (void ) -{ -#if defined(CONFIG_SPARC32 ) && !defined(CONFIG_SMP ) -cpu_data (0 ).udelay_val = loops_per_jiffy; -#endif -}
arch/sparc/kernel/setup_32.c +7 -0
@@ -422,3 +422,10 @@ static int __init topology_init(void) }subsys_initcall (topology_init); + +#if defined(CONFIG_SPARC32 ) && !defined(CONFIG_SMP ) +void __init arch_cpu_finalize_init (void ) +{ +cpu_data (0 ).udelay_val = loops_per_jiffy; +} +#endif
arch/um/Kconfig +1 -0
@@ -5,6 +5,7 @@ menu "UML-specific options" config UML bool default y + select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_KCOV select ARCH_NO_PREEMPT select HAVE_ARCH_AUDITSYSCALL
arch/um/include/asm/bugs.h deleted +0 -7
@@ -1,7 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __UM_BUGS_H -#define __UM_BUGS_H - -void check_bugs (void ); - -#endif
arch/um/kernel/um_arch.c +2 -1
@@ -3,6 +3,7 @@* Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) */ +#include <linux/cpu.h> #include <linux/delay.h> #include <linux/init.h> #include <linux/mm.h>
@@ -353,7 +354,7 @@ void __init setup_arch(char **cmdline_p)setup_hostinfo (host_info,sizeof host_info); } -void __init check_bugs (void ) +void __init arch_cpu_finalize_init (void ) {arch_check_bugs ();os_check_bugs ();
arch/x86/Kconfig +20 -0
@@ -60,6 +60,7 @@ config X86 select ARCH_CLOCKSOURCE_DATA select ARCH_CLOCKSOURCE_INIT select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI + select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_DEBUG_VIRTUAL select ARCH_HAS_DEVMEM_IS_ALLOWED select ARCH_HAS_ELF_RANDOMIZE
@@ -2500,6 +2501,25 @@ config ARCH_ENABLE_SPLIT_PMD_PTLOCK def_bool y depends on X86_64 || X86_PAE +config GDS_FORCE_MITIGATION + bool "Force GDS Mitigation" + depends on CPU_SUP_INTEL + default n + help + Gather Data Sampling (GDS) is a hardware vulnerability which allows + unprivileged speculative access to data which was previously stored in + vector registers. + + This option is equivalent to setting gather_data_sampling=force on the + command line. The microcode mitigation is used if present, otherwise + AVX is disabled as a mitigation. On affected systems that are missing + the microcode any userspace code that unconditionally uses AVX will + break with this option set. + + Setting this option on systems not vulnerable to GDS has no effect. + + If in doubt, say N. + config ARCH_ENABLE_HUGEPAGE_MIGRATION def_bool y depends on X86_64 && HUGETLB_PAGE && MIGRATION
arch/x86/include/asm/bugs.h +0 -2
@@ -4,8 +4,6 @@#include <asm/processor.h> -extern void check_bugs (void ); -#if defined(CONFIG_CPU_SUP_INTEL )void check_mpx_erratum (struct cpuinfo_x86 *c);#else
arch/x86/include/asm/cpufeature.h +8 -2
@@ -30,6 +30,8 @@ enum cpuid_leafsCPUID_7_ECX ,CPUID_8000_0007_EBX ,CPUID_7_EDX , +CPUID_8000_001F_EAX , + CPUID_8000_0021_EAX, };#ifdef CONFIG_X86_FEATURE_NAMES
@@ -88,8 +90,10 @@ extern const char * const x86_bug_flags[NBUGINTS*32]; CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 16, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 17, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 18, feature_bit) || \ + CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 19, feature_bit) || \ + CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 20, feature_bit) || \ REQUIRED_MASK_CHECK || \ - BUILD_BUG_ON_ZERO(NCAPINTS != 19)) + BUILD_BUG_ON_ZERO(NCAPINTS != 21))#define DISABLED_MASK_BIT_SET (feature_bit) \ ( CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 0, feature_bit) || \
@@ -111,8 +115,10 @@ extern const char * const x86_bug_flags[NBUGINTS*32]; CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 16, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 17, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 18, feature_bit) || \ + CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 19, feature_bit) || \ + CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 20, feature_bit) || \ DISABLED_MASK_CHECK || \ - BUILD_BUG_ON_ZERO(NCAPINTS != 19)) + BUILD_BUG_ON_ZERO(NCAPINTS != 21))#define cpu_has (c, bit) \ (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \
arch/x86/include/asm/cpufeatures.h +13 -5
@@ -13,8 +13,8 @@/* * Defines x86 CPU feature bits */ -#define NCAPINTS 19/* N 32-bit words worth of info */ -#define NBUGINTS 1/* N 32-bit bug flags */ +#define NCAPINTS 21/* N 32-bit words worth of info */ +#define NBUGINTS 2/* N 32-bit bug flags */ /* * Note: If the comment begins with a quoted string, that string is used
@@ -96,7 +96,7 @@#define X86_FEATURE_SYSCALL32 ( 3*32+14)/* "" syscall in IA32 userspace */ #define X86_FEATURE_SYSENTER32 ( 3*32+15)/* "" sysenter in IA32 userspace */ #define X86_FEATURE_REP_GOOD ( 3*32+16)/* REP microcode works well */ -#define X86_FEATURE_SME_COHERENT ( 3*32+17)/* "" AMD hardware-enforced cache coherency */ +/* FREE! ( 3*32+17) */ #define X86_FEATURE_LFENCE_RDTSC ( 3*32+18)/* "" LFENCE synchronizes RDTSC */ #define X86_FEATURE_ACC_POWER ( 3*32+19)/* AMD Accumulated Power Mechanism */ #define X86_FEATURE_NOPL ( 3*32+20)/* The NOPL (0F 1F) instructions */
@@ -201,7 +201,7 @@#define X86_FEATURE_INVPCID_SINGLE ( 7*32+ 7)/* Effectively INVPCID && CR4.PCIDE=1 */ #define X86_FEATURE_HW_PSTATE ( 7*32+ 8)/* AMD HW-PState */ #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9)/* AMD ProcFeedbackInterface */ -#define X86_FEATURE_SME ( 7*32+10)/* AMD Secure Memory Encryption */ +/* FREE! ( 7*32+10) */ #define X86_FEATURE_PTI ( 7*32+11)/* Kernel Page Table Isolation enabled */ #define X86_FEATURE_KERNEL_IBRS ( 7*32+12)/* "" Set/clear IBRS on kernel entry/exit */ #define X86_FEATURE_RSB_VMEXIT ( 7*32+13)/* "" Fill RSB on VM-Exit */
@@ -211,7 +211,7 @@#define X86_FEATURE_SSBD ( 7*32+17)/* Speculative Store Bypass Disable */ #define X86_FEATURE_MBA ( 7*32+18)/* Memory Bandwidth Allocation */ #define X86_FEATURE_RSB_CTXSW ( 7*32+19)/* "" Fill RSB on context switches */ -#define X86_FEATURE_SEV ( 7*32+20)/* AMD Secure Encrypted Virtualization */ +/* FREE! ( 7*32+20) */ #define X86_FEATURE_USE_IBPB ( 7*32+21)/* "" Indirect Branch Prediction Barrier enabled */ #define X86_FEATURE_USE_IBRS_FW ( 7*32+22)/* "" Use IBRS during runtime firmware calls */ #define X86_FEATURE_SPEC_STORE_BYPASS_DISABLE ( 7*32+23)/* "" Disable Speculative Store Bypass. */
@@ -375,6 +375,13 @@#define X86_FEATURE_ARCH_CAPABILITIES (18*32+29)/* IA32_ARCH_CAPABILITIES MSR (Intel) */ #define X86_FEATURE_SPEC_CTRL_SSBD (18*32+31)/* "" Speculative Store Bypass Disable */ +/* AMD-defined memory encryption features, CPUID level 0x8000001f (EAX), word 19 */ +#define X86_FEATURE_SME (19*32+ 0)/* AMD Secure Memory Encryption */ +#define X86_FEATURE_SEV (19*32+ 1)/* AMD Secure Encrypted Virtualization */ +#define X86_FEATURE_VM_PAGE_FLUSH (19*32+ 2)/* "" VM Page Flush MSR is supported */ +#define X86_FEATURE_SEV_ES (19*32+ 3)/* AMD Secure Encrypted Virtualization - Encrypted State */ +#define X86_FEATURE_SME_COHERENT (19*32+10)/* "" AMD hardware-enforced cache coherency */ +/* * BUG word(s) */
@@ -415,5 +422,6 @@#define X86_BUG_RETBLEED X86_BUG(26)/* CPU is affected by RETBleed */ #define X86_BUG_EIBRS_PBRSB X86_BUG(27)/* EIBRS is vulnerable to Post Barrier RSB Predictions */ #define X86_BUG_MMIO_UNKNOWN X86_BUG(28)/* CPU is too old and its MMIO Stale Data status is unknown */ +#define X86_BUG_GDS X86_BUG(29)/* CPU is affected by Gather Data Sampling */ #endif /* _ASM_X86_CPUFEATURES_H */
arch/x86/include/asm/disabled-features.h +3 -1
@@ -84,6 +84,8 @@#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57|DISABLE_UMIP)#define DISABLED_MASK17 0#define DISABLED_MASK18 0 -#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19) +#define DISABLED_MASK19 0 +#define DISABLED_MASK20 0 +#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 21)#endif /* _ASM_X86_DISABLED_FEATURES_H */
arch/x86/include/asm/fpu/internal.h +1 -1
@@ -41,7 +41,7 @@ extern int dump_fpu(struct pt_regs *ptregs, struct user_i387_struct *fpstate);extern void fpu__init_cpu (void );extern void fpu__init_system_xstate (void );extern void fpu__init_cpu_xstate (void ); -extern void fpu__init_system (struct cpuinfo_x86 *c); +extern void fpu__init_system (void );extern void fpu__init_check_bugs (void );extern void fpu__resume_cpu (void );extern u64 fpu__get_supported_xfeatures_mask (void );
arch/x86/include/asm/mem_encrypt.h +2 -0
@@ -77,6 +77,8 @@ early_set_memory_decrypted(unsigned long vaddr, unsigned long size) { return 0;static inline int __init early_set_memory_encrypted (unsigned long vaddr,unsigned long size) {return 0 ; } +static inline void mem_encrypt_init (void ) { } +#define __bss_decrypted#endif /* CONFIG_AMD_MEM_ENCRYPT */
arch/x86/include/asm/msr-index.h +12 -0
@@ -147,6 +147,15 @@* Not susceptible to Post-Barrier * Return Stack Buffer Predictions. */ +#define ARCH_CAP_GDS_CTRL BIT(25)/* +* CPU is vulnerable to Gather +* Data Sampling (GDS) and +* has controls for mitigation. +*/ +#define ARCH_CAP_GDS_NO BIT(26)/* +* CPU is not vulnerable to Gather +* Data Sampling (GDS). +*/ #define MSR_IA32_FLUSH_CMD 0x0000010b#define L1D_FLUSH BIT(0)/*
@@ -165,6 +174,8 @@#define MSR_IA32_MCU_OPT_CTRL 0x00000123#define RNGDS_MITG_DIS BIT(0)#define FB_CLEAR_DIS BIT(3)/* CPU Fill buffer clear disable */ +#define GDS_MITG_DIS BIT(4)/* Disable GDS mitigation */ +#define GDS_MITG_LOCKED BIT(5)/* GDS mitigation locked */ #define MSR_IA32_SYSENTER_CS 0x00000174#define MSR_IA32_SYSENTER_ESP 0x00000175
@@ -484,6 +495,7 @@#define MSR_AMD64_ICIBSEXTDCTL 0xc001103c#define MSR_AMD64_IBSOPDATA4 0xc001103d#define MSR_AMD64_IBS_REG_COUNT_MAX 8/* includes MSR_AMD64_IBSBRTARGET */ +#define MSR_AMD64_VM_PAGE_FLUSH 0xc001011e#define MSR_AMD64_SEV 0xc0010131#define MSR_AMD64_SEV_ENABLED_BIT 0#define MSR_AMD64_SEV_ENABLED BIT_ULL(MSR_AMD64_SEV_ENABLED_BIT)
arch/x86/include/asm/required-features.h +3 -1
@@ -101,6 +101,8 @@#define REQUIRED_MASK16 0#define REQUIRED_MASK17 0#define REQUIRED_MASK18 0 -#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19) +#define REQUIRED_MASK19 0 +#define REQUIRED_MASK20 0 +#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 21)#endif /* _ASM_X86_REQUIRED_FEATURES_H */
arch/x86/kernel/cpu/amd.c +2 -1
@@ -663,7 +663,7 @@ static void early_detect_mem_encrypt(struct cpuinfo_x86 *c)* If BIOS has not enabled SME then don't advertise the * SME feature (set in scattered.c). * For SEV: If BIOS has not enabled SEV then don't advertise the -* SEV feature (set in scattered.c). +* SEV and SEV_ES feature (set in scattered.c). * * In all cases, since support for SME and SEV requires long mode, * don't advertise the feature under CONFIG_X86_32.
@@ -694,6 +694,7 @@ static void early_detect_mem_encrypt(struct cpuinfo_x86 *c)setup_clear_cpu_cap (X86_FEATURE_SME ); clear_sev:setup_clear_cpu_cap (X86_FEATURE_SEV ); +setup_clear_cpu_cap (X86_FEATURE_SEV_ES ); } }
arch/x86/kernel/cpu/bugs.c +159 -50
263 lines not on this page · raw message
arch/x86/kernel/cpu/common.c +107 -15
194 lines not on this page · raw message
arch/x86/kernel/cpu/cpu.h +2 -0
@@ -76,9 +76,11 @@ extern void detect_ht(struct cpuinfo_x86 *c);extern void check_null_seg_clears_base (struct cpuinfo_x86 *c);unsigned int aperfmperf_get_khz (int cpu); +void cpu_select_mitigations (void );extern void x86_spec_ctrl_setup_ap (void );extern void update_srbds_msr (void ); +extern void update_gds_msr (void );extern u64 x86_read_arch_cap_msr (void );
arch/x86/kernel/cpu/scattered.c +0 -3
@@ -40,9 +40,6 @@ static const struct cpuid_bit cpuid_bits[] = { { X86_FEATURE_CPB, CPUID_EDX, 9, 0x80000007, 0 }, { X86_FEATURE_PROC_FEEDBACK, CPUID_EDX, 11, 0x80000007, 0 }, { X86_FEATURE_MBA, CPUID_EBX, 6, 0x80000008, 0 }, - { X86_FEATURE_SME, CPUID_EAX, 0, 0x8000001f, 0 }, - { X86_FEATURE_SEV, CPUID_EAX, 1, 0x8000001f, 0 }, - { X86_FEATURE_SME_COHERENT, CPUID_EAX, 10, 0x8000001f, 0 }, { 0, 0, 0, 0, 0 } };
arch/x86/kernel/fpu/init.c +4 -4
@@ -50,7 +50,7 @@ void fpu__init_cpu(void)fpu__init_cpu_xstate (); } -static bool fpu__probe_without_cpuid (void ) +static bool __init fpu__probe_without_cpuid (void ) {unsigned long cr0;u16 fsw, fcw;
@@ -68,7 +68,7 @@ static bool fpu__probe_without_cpuid(void)return fsw ==0 && (fcw &0x103f ) ==0x003f ; } -static void fpu__init_system_early_generic (struct cpuinfo_x86 *c) +static void __init fpu__init_system_early_generic (void ) {if (!boot_cpu_has (X86_FEATURE_CPUID ) && !test_bit (X86_FEATURE_FPU , (unsigned long *)cpu_caps_cleared)) {
@@ -290,10 +290,10 @@ static void __init fpu__init_parse_early_param(void)* Called on the boot CPU once per system bootup, to set up the initial * FPU state that is later cloned into all processes: */ -void __init fpu__init_system (struct cpuinfo_x86 *c) +void __init fpu__init_system (void ) {fpu__init_parse_early_param (); -fpu__init_system_early_generic (c); +fpu__init_system_early_generic ();/* * The FPU has to be operational for some of the
arch/x86/kernel/smpboot.c +1 -0
@@ -235,6 +235,7 @@ static void notrace start_secondary(void *unused)#endif load_current_idt ();cpu_init (); +fpu__init_cpu ();rcu_cpu_starting (raw_smp_processor_id ()); x86_cpuinit.early_percpu_clock_init ();preempt_disable ();
arch/x86/kvm/cpuid.h +1 -0
@@ -53,6 +53,7 @@ static const struct cpuid_reg reverse_cpuid[] = { [CPUID_7_ECX] = { 7, 0, CPUID_ECX}, [CPUID_8000_0007_EBX] = {0x80000007, 0, CPUID_EBX}, [CPUID_7_EDX] = { 7, 0, CPUID_EDX}, + [CPUID_8000_0021_EAX] = {0x80000021, 0, CPUID_EAX}, }; static __always_inline struct cpuid_reg x86_feature_cpuid(unsigned x86_feature)
arch/x86/kvm/x86.c +5 -0
@@ -226,6 +226,8 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {u64 __read_mostly host_xcr0; +extern bool gds_ucode_mitigated (void ); +struct kmem_cache *x86_fpu_cache;EXPORT_SYMBOL_GPL (x86_fpu_cache);
@@ -1409,6 +1411,9 @@ static u64 kvm_get_arch_capabilities(void)/* Guests don't need to know "Fill buffer clear control" exists */ data &= ~ARCH_CAP_FB_CLEAR_CTRL ; +if (!boot_cpu_has_bug (X86_BUG_GDS ) ||gds_ucode_mitigated ()) + data |=ARCH_CAP_GDS_NO ; +return data; }
arch/x86/mm/init.c +6 -1
@@ -7,6 +7,7 @@#include <linux/swapops.h> #include <linux/kmemleak.h> #include <linux/sched/task.h> +#include <linux/sched/mm.h> #include <asm/set_memory.h> #include <asm/cpu_device_id.h>
@@ -26,6 +27,7 @@#include <asm/cpufeature.h> #include <asm/pti.h> #include <asm/text-patching.h> +#include <asm/paravirt.h> /* * We need to define the tracepoints somewhere, and tlb.c
@@ -735,9 +737,12 @@ void __init poking_init(void)spinlock_t *ptl;pte_t *ptep; - poking_mm =copy_init_mm (); + poking_mm =mm_alloc ();BUG_ON (!poking_mm); +/* Xen PV guests need the PGD to be pinned. */ +paravirt_arch_dup_mmap (NULL , poking_mm); +/* * Randomize the poking address, but make sure that the following page * will be mapped at the same PMD. We need 2 pages, so find space for 3,
arch/x86/xen/smp_pv.c +2 -0
@@ -28,6 +28,7 @@#include <asm/desc.h> #include <asm/pgtable.h> #include <asm/cpu.h> +#include <asm/fpu/internal.h> #include <xen/interface/xen.h> #include <xen/interface/vcpu.h>
@@ -61,6 +62,7 @@ static void cpu_bringup(void)cr4_init ();cpu_init (); +fpu__init_cpu ();touch_softlockup_watchdog ();preempt_disable ();
arch/xtensa/include/asm/bugs.h deleted +0 -18
@@ -1,18 +0,0 @@ -/* -* include/asm-xtensa/bugs.h -* -* This is included by init/main.c to check for architecture-dependent bugs. -* -* Xtensa processors don't have any bugs. :) -* -* This file is subject to the terms and conditions of the GNU General -* Public License. See the file "COPYING" in the main directory of -* this archive for more details. -*/ - -#ifndef _XTENSA_BUGS_H -#define _XTENSA_BUGS_H - -static void check_bugs (void ) { } - -#endif /* _XTENSA_BUGS_H */
drivers/base/cpu.c +8 -0
@@ -581,6 +581,12 @@ ssize_t __weak cpu_show_retbleed(struct device *dev,return sysfs_emit (buf,"Not affected\n" ); } +ssize_t __weak cpu_show_gds (struct device *dev, +struct device_attribute *attr,char *buf) +{ +return sysfs_emit (buf,"Not affected\n" ); +} + static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL); static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL); static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
@@ -592,6 +598,7 @@ static DEVICE_ATTR(itlb_multihit, 0444, cpu_show_itlb_multihit, NULL); static DEVICE_ATTR(srbds, 0444, cpu_show_srbds, NULL); static DEVICE_ATTR(mmio_stale_data, 0444, cpu_show_mmio_stale_data, NULL); static DEVICE_ATTR(retbleed, 0444, cpu_show_retbleed, NULL); +static DEVICE_ATTR(gather_data_sampling, 0444, cpu_show_gds, NULL);static struct attribute *cpu_root_vulnerabilities_attrs[] = { &dev_attr_meltdown.attr,
@@ -605,6 +612,7 @@ static struct attribute *cpu_root_vulnerabilities_attrs[] = { &dev_attr_srbds.attr, &dev_attr_mmio_stale_data.attr, &dev_attr_retbleed.attr, + &dev_attr_gather_data_sampling.attr, NULL };
drivers/net/xen-netback/netback.c +10 -5
@@ -389,7 +389,7 @@ static void xenvif_get_requests(struct xenvif_queue *queue,struct gnttab_map_grant_ref *gop = queue->tx_map_ops + *map_ops;struct xen_netif_tx_request *txp = first; - nr_slots = shinfo->nr_frags +1 ; + nr_slots = shinfo->nr_frags + frag_overflow +1 ;copy_count (skb) =0 ;XENVIF_TX_CB (skb)->split_mask =0 ;
@@ -455,8 +455,8 @@ static void xenvif_get_requests(struct xenvif_queue *queue, } } -for (shinfo->nr_frags =0 ; shinfo->nr_frags < nr_slots; - shinfo->nr_frags++, gop++) { +for (shinfo->nr_frags =0 ; nr_slots >0 && shinfo->nr_frags <MAX_SKB_FRAGS ; + shinfo->nr_frags++, gop++, nr_slots--) { index =pending_index (queue->pending_cons++); pending_idx = queue->pending_ring[index]; xenvif_tx_create_map_op(queue, pending_idx, txp,
@@ -469,12 +469,12 @@ static void xenvif_get_requests(struct xenvif_queue *queue, txp++; } -if (frag_overflow) { +if (nr_slots >0 ) { shinfo =skb_shinfo (nskb); frags = shinfo->frags; -for (shinfo->nr_frags =0 ; shinfo->nr_frags < frag_overflow; +for (shinfo->nr_frags =0 ; shinfo->nr_frags < nr_slots; shinfo->nr_frags++, txp++, gop++) { index =pending_index (queue->pending_cons++); pending_idx = queue->pending_ring[index];
@@ -485,6 +485,11 @@ static void xenvif_get_requests(struct xenvif_queue *queue, }skb_shinfo (skb)->frag_list = nskb; + }else if (nskb) { +/* A frag_list skb was allocated but it is no longer needed +* because enough slots were converted to copy ops above. +*/ +kfree_skb (nskb); } (*copy_ops) = cop - queue->tx_copy_ops;
include/asm-generic/bugs.h deleted +0 -11
@@ -1,11 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __ASM_GENERIC_BUGS_H -#define __ASM_GENERIC_BUGS_H -/* -* This file is included by 'init/main.c' to check for -* architecture-dependent bugs. -*/ - -static inline void check_bugs (void ) { } - -#endif /* __ASM_GENERIC_BUGS_H */
include/linux/cpu.h +6 -0
@@ -193,6 +193,12 @@ void arch_cpu_idle_enter(void);void arch_cpu_idle_exit (void );void arch_cpu_idle_dead (void ); +#ifdef CONFIG_ARCH_HAS_CPU_FINALIZE_INIT +void arch_cpu_finalize_init (void ); +#else +static inline void arch_cpu_finalize_init (void ) { } +#endif +int cpu_report_state (int cpu);int cpu_check_up_prepare (int cpu);void cpu_set_state_online (int cpu);
include/linux/sched/task.h +1 -1
@@ -53,6 +53,7 @@ extern void sched_dead(struct task_struct *p);void __noreturn do_task_dead (void );void __noreturn make_task_dead (int signr); +extern void mm_cache_init (void );extern void proc_caches_init (void );extern void fork_init (void );
@@ -93,7 +94,6 @@ extern long _do_fork(struct kernel_clone_args *kargs);extern bool legacy_clone_args_valid (const struct kernel_clone_args *kargs);extern long do_fork (unsigned long ,unsigned long ,unsigned long ,int __user *,int __user *);struct task_struct *fork_idle (int ); -struct mm_struct *copy_init_mm (void );extern pid_t kernel_thread (int (*fn)(void *),void *arg,unsigned long flags);extern long kernel_wait4 (pid_t ,int __user *,int ,struct rusage *);
init/main.c +5 -16
@@ -93,10 +93,8 @@#include <linux/cache.h> #include <linux/rodata_test.h> #include <linux/jump_label.h> -#include <linux/mem_encrypt.h> #include <asm/io.h> -#include <asm/bugs.h> #include <asm/setup.h> #include <asm/sections.h> #include <asm/cacheflush.h>
@@ -504,8 +502,6 @@ void __init __weak thread_stack_cache_init(void) }#endif -void __init __weak mem_encrypt_init (void ) { } -void __init __weak poking_init (void ) { }void __init __weak pgtable_cache_init (void ) { }
@@ -567,6 +563,7 @@ static void __init mm_init(void)init_espfix_bsp ();/* Should be run after espfix64 is set up. */ pti_init (); +mm_cache_init (); }void __init __weak arch_call_rest_init (void )
@@ -627,7 +624,7 @@ asmlinkage __visible void __init start_kernel(void)sort_main_extable ();trap_init ();mm_init (); - +poking_init ();ftrace_init ();/* trace_printk can be enabled here */
@@ -721,14 +718,6 @@ asmlinkage __visible void __init start_kernel(void)*/ locking_selftest (); -/* -* This needs to be called before any devices perform DMA -* operations that might use the SWIOTLB bounce buffers. It will -* mark the bounce buffers as decrypted so that their usage will -* not cause "plain-text" data to be decrypted when accessed. -*/ -mem_encrypt_init (); -#ifdef CONFIG_BLK_DEV_INITRD if (initrd_start && !initrd_below_start_ok &&page_to_pfn (virt_to_page ((void *)initrd_start)) < min_low_pfn) {
@@ -745,6 +734,9 @@ asmlinkage __visible void __init start_kernel(void)late_time_init ();sched_clock_init ();calibrate_delay (); + +arch_cpu_finalize_init (); +pid_idr_init ();anon_vma_init ();#ifdef CONFIG_X86
@@ -771,9 +763,6 @@ asmlinkage __visible void __init start_kernel(void)taskstats_init_early ();delayacct_init (); -poking_init (); -check_bugs (); -acpi_subsystem_init ();arch_post_acpi_subsys_init ();sfi_init_late ();
kernel/fork.c +18 -19
@@ -2335,11 +2335,6 @@ struct task_struct *fork_idle(int cpu)return task; } -struct mm_struct *copy_init_mm (void ) -{ -return dup_mm (NULL , &init_mm); -} -/* * Ok, this is the main fork-routine. *
@@ -2710,10 +2705,27 @@ static void sighand_ctor(void *data)init_waitqueue_head (&sighand->signalfd_wqh); } -void __init proc_caches_init (void ) +void __init mm_cache_init (void ) {unsigned int mm_size; +/* +* The mm_cpumask is located at the end of mm_struct, and is +* dynamically sized based on the maximum CPU number this system +* can have, taking hotplug into account (nr_cpu_ids). +*/ + mm_size =sizeof (struct mm_struct ) +cpumask_size (); + + mm_cachep =kmem_cache_create_usercopy ("mm_struct" , + mm_size,ARCH_MIN_MMSTRUCT_ALIGN , +SLAB_HWCACHE_ALIGN |SLAB_PANIC |SLAB_ACCOUNT , + offsetof(struct mm_struct , saved_auxv), + sizeof_field(struct mm_struct, saved_auxv), +NULL ); +} + +void __init proc_caches_init (void ) +{ sighand_cachep = kmem_cache_create("sighand_cache", sizeof(struct sighand_struct), 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_TYPESAFE_BY_RCU|
@@ -2731,19 +2743,6 @@ void __init proc_caches_init(void)SLAB_HWCACHE_ALIGN |SLAB_PANIC |SLAB_ACCOUNT , NULL); -/* -* The mm_cpumask is located at the end of mm_struct, and is -* dynamically sized based on the maximum CPU number this system -* can have, taking hotplug into account (nr_cpu_ids). -*/ - mm_size =sizeof (struct mm_struct ) +cpumask_size (); - - mm_cachep =kmem_cache_create_usercopy ("mm_struct" , - mm_size,ARCH_MIN_MMSTRUCT_ALIGN , -SLAB_HWCACHE_ALIGN |SLAB_PANIC |SLAB_ACCOUNT , - offsetof(struct mm_struct , saved_auxv), - sizeof_field(struct mm_struct, saved_auxv), -NULL ); vm_area_cachep =KMEM_CACHE (vm_area_struct,SLAB_PANIC |SLAB_ACCOUNT );mmap_init ();nsproxy_cache_init ();
tools/arch/x86/include/asm/cpufeatures.h +14 -4
@@ -13,8 +13,8 @@/* * Defines x86 CPU feature bits */ -#define NCAPINTS 19/* N 32-bit words worth of info */ -#define NBUGINTS 1/* N 32-bit bug flags */ +#define NCAPINTS 20/* N 32-bit words worth of info */ +#define NBUGINTS 2/* N 32-bit bug flags */ /* * Note: If the comment begins with a quoted string, that string is used
@@ -96,6 +96,7 @@#define X86_FEATURE_SYSCALL32 ( 3*32+14)/* "" syscall in IA32 userspace */ #define X86_FEATURE_SYSENTER32 ( 3*32+15)/* "" sysenter in IA32 userspace */ #define X86_FEATURE_REP_GOOD ( 3*32+16)/* REP microcode works well */ +/* FREE! ( 3*32+17) */ #define X86_FEATURE_LFENCE_RDTSC ( 3*32+18)/* "" LFENCE synchronizes RDTSC */ #define X86_FEATURE_ACC_POWER ( 3*32+19)/* AMD Accumulated Power Mechanism */ #define X86_FEATURE_NOPL ( 3*32+20)/* The NOPL (0F 1F) instructions */
@@ -199,7 +200,7 @@#define X86_FEATURE_INVPCID_SINGLE ( 7*32+ 7)/* Effectively INVPCID && CR4.PCIDE=1 */ #define X86_FEATURE_HW_PSTATE ( 7*32+ 8)/* AMD HW-PState */ #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9)/* AMD ProcFeedbackInterface */ -#define X86_FEATURE_SME ( 7*32+10)/* AMD Secure Memory Encryption */ +/* FREE! ( 7*32+10) */ #define X86_FEATURE_PTI ( 7*32+11)/* Kernel Page Table Isolation enabled */ #define X86_FEATURE_RETPOLINE ( 7*32+12)/* "" Generic Retpoline mitigation for Spectre variant 2 */ #define X86_FEATURE_RETPOLINE_LFENCE ( 7*32+13)/* "" Use LFENCEs for Spectre variant 2 */
@@ -209,7 +210,7 @@#define X86_FEATURE_SSBD ( 7*32+17)/* Speculative Store Bypass Disable */ #define X86_FEATURE_MBA ( 7*32+18)/* Memory Bandwidth Allocation */ #define X86_FEATURE_RSB_CTXSW ( 7*32+19)/* "" Fill RSB on context switches */ -#define X86_FEATURE_SEV ( 7*32+20)/* AMD Secure Encrypted Virtualization */ +/* FREE! ( 7*32+20) */ #define X86_FEATURE_USE_IBPB ( 7*32+21)/* "" Indirect Branch Prediction Barrier enabled */ #define X86_FEATURE_USE_IBRS_FW ( 7*32+22)/* "" Use IBRS during runtime firmware calls */ #define X86_FEATURE_SPEC_STORE_BYPASS_DISABLE ( 7*32+23)/* "" Disable Speculative Store Bypass. */
@@ -287,6 +288,7 @@#define X86_FEATURE_RSB_VMEXIT_LITE (11*32+17)/* "" Fill RSB on VM-Exit when EIBRS is enabled */ /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */ +#define X86_FEATURE_AVX_VNNI (12*32+ 4)/* AVX VNNI instructions */ #define X86_FEATURE_AVX512_BF16 (12*32+ 5)/* AVX512 BFLOAT16 instructions */ /* AMD-defined CPU features, CPUID level 0x80000008 (EBX), word 13 */
@@ -328,6 +330,7 @@#define X86_FEATURE_AVIC (15*32+13)/* Virtual Interrupt Controller */ #define X86_FEATURE_V_VMSAVE_VMLOAD (15*32+15)/* Virtual VMSAVE VMLOAD */ #define X86_FEATURE_VGIF (15*32+16)/* Virtual GIF */ +#define X86_FEATURE_SVME_ADDR_CHK (15*32+28)/* "" SVME addr check */ /* Intel-defined CPU features, CPUID level 0x00000007:0 (ECX), word 16 */ #define X86_FEATURE_AVX512VBMI (16*32+ 1)/* AVX512 Vector Bit Manipulation instructions*/
@@ -367,6 +370,13 @@#define X86_FEATURE_ARCH_CAPABILITIES (18*32+29)/* IA32_ARCH_CAPABILITIES MSR (Intel) */ #define X86_FEATURE_SPEC_CTRL_SSBD (18*32+31)/* "" Speculative Store Bypass Disable */ +/* AMD-defined memory encryption features, CPUID level 0x8000001f (EAX), word 19 */ +#define X86_FEATURE_SME (19*32+ 0)/* AMD Secure Memory Encryption */ +#define X86_FEATURE_SEV (19*32+ 1)/* AMD Secure Encrypted Virtualization */ +#define X86_FEATURE_VM_PAGE_FLUSH (19*32+ 2)/* "" VM Page Flush MSR is supported */ +#define X86_FEATURE_SEV_ES (19*32+ 3)/* AMD Secure Encrypted Virtualization - Encrypted State */ +#define X86_FEATURE_SME_COHERENT (19*32+10)/* "" AMD hardware-enforced cache coherency */ +/* * BUG word(s) */
tools/arch/x86/include/asm/disabled-features.h +2 -1
@@ -84,6 +84,7 @@#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57|DISABLE_UMIP)#define DISABLED_MASK17 0#define DISABLED_MASK18 0 -#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19) +#define DISABLED_MASK19 0 +#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 20)#endif /* _ASM_X86_DISABLED_FEATURES_H */
tools/arch/x86/include/asm/required-features.h +2 -1
@@ -101,6 +101,7 @@#define REQUIRED_MASK16 0#define REQUIRED_MASK17 0#define REQUIRED_MASK18 0 -#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19) +#define REQUIRED_MASK19 0 +#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 20)#endif /* _ASM_X86_REQUIRED_FEATURES_H */
Re: Linux 5.4.252 FPU initialization warnings in stable kernels 5.4/5.10
In reply to Greg Kroah-HartmanHi Thomas/Greg
We are seeing “get of unsupported state” warnings during FPU initialization in the v5.4.252 and v5.10.189 kernel booted on AWS EC2 instances with Intel processors based on Nitro system. These warnings are observed in EC2 c5.18xlarge instance:
[ 1.204495] ------------[ cut here ]------------ [ 1.204495] get of unsupported state [ 1.204495] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:879 get_xsave_addr+0x81/0x90 [ 1.204495] Modules linked in: [ 1.204495] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.252 #10 [ 1.204495] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.204495] RIP: 0010:get_xsave_addr+0x81/0x90 [ 1.204495] Code: 5b c3 48 83 c4 08 31 c0 5b c3 80 3d 7c f0 78 01 00 75 c1 48 c7 c7 34 be 03 b2 89 4c 24 04 c6 05 68 f0 78 01 01 e8 ef 41 05 00 <0f> 0b 48 63 4c 24 04 eb a1 31 c0 c3 0f 1f 00 0f 1f 44 00 00 41 54 [ 1.204495] RSP: 0000:ffffffffb2603ed0 EFLAGS: 00010282 [ 1.204495] RAX: 0000000000000000 RBX: ffffffffb27ebe80 RCX: 0000000047cb2486 [ 1.204495] RDX: 0000000000000018 RSI: ffffffffb39e99a0 RDI: ffffffffb39e756c [ 1.204495] RBP: ffffffffb27ebd40 R08: 7520666f20746567 R09: 74726f707075736e [ 1.204495] R10: 00000000000962fc R11: 6574617473206465 R12: ffffffffb2d89b60 [ 1.204495] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.204495] FS: 0000000000000000(0000) GS:ffff96d031400000(0000) knlGS:0000000000000000 [ 1.204495] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.204495] CR2: ffff96e277fff000 CR3: 000000103060a001 CR4: 00000000007200b0 [ 1.204495] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.204495] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.204495] Call Trace: [ 1.204495] ? __warn+0x85/0xd0 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? report_bug+0xb6/0x130 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? fixup_bug.part.12+0x18/0x30 [ 1.204495] ? do_error_trap+0x95/0xb0 [ 1.204495] ? do_invalid_op+0x36/0x40 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? invalid_op+0x1e/0x30 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] identify_cpu+0x422/0x510 [ 1.204495] identify_boot_cpu+0xc/0x94 [ 1.204495] arch_cpu_finalize_init+0x5/0x47 [ 1.204495] start_kernel+0x468/0x511 [ 1.204495] secondary_startup_64+0xa4/0xb0 [ 1.204495] ---[ end trace dffac81ff531fcf2 ]---
The issue can be easily reproduced on both virtualized and bare metal instances but interesting thing is
it can’t be found in other latest stable kernels v4.14, v4.19, v5.15 and newer. We tried to bisect between v5.4.251 and v5.4.252 and were able to find below commit to be the culprit. Also, reverting it in v5.4.252 and v5.10.189 resolved above warnings completely.
x86/fpu: Move FPU initialization into arch_cpu_finalize_init() commit b81fac906a8f9e682e513ddd95697ec7a20878d4 upstream
We used to speculate the fix might be similar to commit 3f8968f1f0ad (“x86/xen: Fix secondary processors' FPU initialization”) but since only kernel 5.4/5.10 are impacted, we’re not quite sure how this commit affects them in practice. Could you please take a look and share your insights?
Also put stack traces from v5.10.189:
[ 1.210910] ------------[ cut here ]------------ [ 1.210910] get of unsupported state [ 1.210910] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:974 get_xsave_addr+0x89/0xa0 [ 1.210910] Modules linked in: [ 1.210910] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.10.189 #4 [ 1.210910] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.210910] RIP: 0010:get_xsave_addr+0x89/0xa0 [ 1.210910] Code: c4 08 31 c0 5b e9 17 a4 bc 00 80 3d e7 75 eb 01 00 75 b9 48 c7 c7 b7 f4 09 ab 89 4c 24 04 c6 05 d3 75 eb 01 01 e8 17 98 05 00 <0f> 0b 48 63 4c 24 04 eb 99 31 c0 e9 e7 a3 bc 00 0f 1f 80 00 00 00 [ 1.210910] RSP: 0000:ffffffffab603ec8 EFLAGS: 00010286 [ 1.210910] RAX: 0000000000000000 RBX: ffffffffabf25bc0 RCX: 00000000fffeffff [ 1.210910] RDX: ffffffffab603cd0 RSI: 00000000fffeffff RDI: ffffffffad1a3dec [ 1.210910] RBP: ffffffffabf25a60 R08: 0000000000000000 R09: 0000000000000001 [ 1.210910] R10: 0000000000000000 R11: ffffffffab603cc8 R12: ffffffffac539b40 [ 1.210910] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.210910] FS: 0000000000000000(0000) GS:ffff9150f1600000(0000) knlGS:0000000000000000 [ 1.210910] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.210910] CR2: ffff915702801000 CR3: 0000001780610001 CR4: 00000000007300b0 [ 1.210910] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.210910] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.210910] Call Trace: [ 1.210910] ? __warn+0x7d/0xe0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? report_bug+0xbb/0x140 [ 1.210910] ? handle_bug+0x3f/0x70 [ 1.210910] ? exc_invalid_op+0x13/0x60 [ 1.210910] ? asm_exc_invalid_op+0x12/0x20 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] identify_cpu+0x42a/0x550 [ 1.210910] identify_boot_cpu+0xc/0x94 [ 1.210910] arch_cpu_finalize_init+0x5/0x47 [ 1.210910] start_kernel+0x4bc/0x56b [ 1.210910] secondary_startup_64_no_verify+0xb0/0xbb [ 1.210910] ---[ end trace 14850c6f8ee0875d ]---
Thanks,
Shaoying
Greg KH
maintainerRe: Linux 5.4.252 FPU initialization warnings in stable kernels 5.4/5.10
Quoted 81 lines · Shaoying Xu
Hi Thomas/Greg
We are seeing “get of unsupported state” warnings during FPU initialization in the v5.4.252 and v5.10.189 kernel booted on AWS EC2 instances with Intel processors based on Nitro system. These warnings are observed in EC2 c5.18xlarge instance:
[ 1.204495] ------------[ cut here ]------------ [ 1.204495] get of unsupported state [ 1.204495] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:879 get_xsave_addr+0x81/0x90 [ 1.204495] Modules linked in: [ 1.204495] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.252 #10 [ 1.204495] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.204495] RIP: 0010:get_xsave_addr+0x81/0x90 [ 1.204495] Code: 5b c3 48 83 c4 08 31 c0 5b c3 80 3d 7c f0 78 01 00 75 c1 48 c7 c7 34 be 03 b2 89 4c 24 04 c6 05 68 f0 78 01 01 e8 ef 41 05 00 <0f> 0b 48 63 4c 24 04 eb a1 31 c0 c3 0f 1f 00 0f 1f 44 00 00 41 54 [ 1.204495] RSP: 0000:ffffffffb2603ed0 EFLAGS: 00010282 [ 1.204495] RAX: 0000000000000000 RBX: ffffffffb27ebe80 RCX: 0000000047cb2486 [ 1.204495] RDX: 0000000000000018 RSI: ffffffffb39e99a0 RDI: ffffffffb39e756c [ 1.204495] RBP: ffffffffb27ebd40 R08: 7520666f20746567 R09: 74726f707075736e [ 1.204495] R10: 00000000000962fc R11: 6574617473206465 R12: ffffffffb2d89b60 [ 1.204495] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.204495] FS: 0000000000000000(0000) GS:ffff96d031400000(0000) knlGS:0000000000000000 [ 1.204495] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.204495] CR2: ffff96e277fff000 CR3: 000000103060a001 CR4: 00000000007200b0 [ 1.204495] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.204495] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.204495] Call Trace: [ 1.204495] ? __warn+0x85/0xd0 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? report_bug+0xb6/0x130 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? fixup_bug.part.12+0x18/0x30 [ 1.204495] ? do_error_trap+0x95/0xb0 [ 1.204495] ? do_invalid_op+0x36/0x40 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? invalid_op+0x1e/0x30 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] identify_cpu+0x422/0x510 [ 1.204495] identify_boot_cpu+0xc/0x94 [ 1.204495] arch_cpu_finalize_init+0x5/0x47 [ 1.204495] start_kernel+0x468/0x511 [ 1.204495] secondary_startup_64+0xa4/0xb0 [ 1.204495] ---[ end trace dffac81ff531fcf2 ]---The issue can be easily reproduced on both virtualized and bare metal instances but interesting thing is
it can’t be found in other latest stable kernels v4.14, v4.19, v5.15 and newer. We tried to bisect between v5.4.251 and v5.4.252 and were able to find below commit to be the culprit. Also, reverting it in v5.4.252 and v5.10.189 resolved above warnings completely.x86/fpu: Move FPU initialization into
arch_cpu_finalize_init()commitb81fac906a8f9e682e513ddd95697ec7a20878d4upstreamWe used to speculate the fix might be similar to commit
3f8968f1f0ad(“x86/xen: Fix secondary processors' FPU initialization”) but since only kernel 5.4/5.10 are impacted, we’re not quite sure how this commit affects them in practice. Could you please take a look and share your insights?Also put stack traces from v5.10.189:
[ 1.210910] ------------[ cut here ]------------ [ 1.210910] get of unsupported state [ 1.210910] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:974 get_xsave_addr+0x89/0xa0 [ 1.210910] Modules linked in: [ 1.210910] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.10.189 #4 [ 1.210910] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.210910] RIP: 0010:get_xsave_addr+0x89/0xa0 [ 1.210910] Code: c4 08 31 c0 5b e9 17 a4 bc 00 80 3d e7 75 eb 01 00 75 b9 48 c7 c7 b7 f4 09 ab 89 4c 24 04 c6 05 d3 75 eb 01 01 e8 17 98 05 00 <0f> 0b 48 63 4c 24 04 eb 99 31 c0 e9 e7 a3 bc 00 0f 1f 80 00 00 00 [ 1.210910] RSP: 0000:ffffffffab603ec8 EFLAGS: 00010286 [ 1.210910] RAX: 0000000000000000 RBX: ffffffffabf25bc0 RCX: 00000000fffeffff [ 1.210910] RDX: ffffffffab603cd0 RSI: 00000000fffeffff RDI: ffffffffad1a3dec [ 1.210910] RBP: ffffffffabf25a60 R08: 0000000000000000 R09: 0000000000000001 [ 1.210910] R10: 0000000000000000 R11: ffffffffab603cc8 R12: ffffffffac539b40 [ 1.210910] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.210910] FS: 0000000000000000(0000) GS:ffff9150f1600000(0000) knlGS:0000000000000000 [ 1.210910] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.210910] CR2: ffff915702801000 CR3: 0000001780610001 CR4: 00000000007300b0 [ 1.210910] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.210910] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.210910] Call Trace: [ 1.210910] ? __warn+0x7d/0xe0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? report_bug+0xbb/0x140 [ 1.210910] ? handle_bug+0x3f/0x70 [ 1.210910] ? exc_invalid_op+0x13/0x60 [ 1.210910] ? asm_exc_invalid_op+0x12/0x20
Quoted 8 lines
[ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] identify_cpu+0x42a/0x550 [ 1.210910] identify_boot_cpu+0xc/0x94 [ 1.210910] arch_cpu_finalize_init+0x5/0x47 [ 1.210910] start_kernel+0x4bc/0x56b [ 1.210910] secondary_startup_64_no_verify+0xb0/0xbb [ 1.210910] ---[ end trace 14850c6f8ee0875d ]---
I think this is fixed with commit b3607269ff57 ("x86/pkeys: Revert a5eff7259790 ("x86/pkeys: Add PKRU value to init_fpstate")"), which is queued up for the next 5.4 and 5.10.y releases to happen "soon". Can you test the released -rc1 versions of this to verify it is resolved or not?
thanks,
greg k-h
Re: Linux 5.4.252 FPU initialization warnings in stable kernels 5.4/5.10
Hi,
Quoted 91 lines · Greg KH
Quoted 81 lines · Shaoying Xu
Hi Thomas/Greg
We are seeing “get of unsupported state” warnings during FPU initialization in the v5.4.252 and v5.10.189 kernel booted on AWS EC2 instances with Intel processors based on Nitro system. These warnings are observed in EC2 c5.18xlarge instance:
[ 1.204495] ------------[ cut here ]------------ [ 1.204495] get of unsupported state [ 1.204495] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:879 get_xsave_addr+0x81/0x90 [ 1.204495] Modules linked in: [ 1.204495] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.252 #10 [ 1.204495] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.204495] RIP: 0010:get_xsave_addr+0x81/0x90 [ 1.204495] Code: 5b c3 48 83 c4 08 31 c0 5b c3 80 3d 7c f0 78 01 00 75 c1 48 c7 c7 34 be 03 b2 89 4c 24 04 c6 05 68 f0 78 01 01 e8 ef 41 05 00 <0f> 0b 48 63 4c 24 04 eb a1 31 c0 c3 0f 1f 00 0f 1f 44 00 00 41 54 [ 1.204495] RSP: 0000:ffffffffb2603ed0 EFLAGS: 00010282 [ 1.204495] RAX: 0000000000000000 RBX: ffffffffb27ebe80 RCX: 0000000047cb2486 [ 1.204495] RDX: 0000000000000018 RSI: ffffffffb39e99a0 RDI: ffffffffb39e756c [ 1.204495] RBP: ffffffffb27ebd40 R08: 7520666f20746567 R09: 74726f707075736e [ 1.204495] R10: 00000000000962fc R11: 6574617473206465 R12: ffffffffb2d89b60 [ 1.204495] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.204495] FS: 0000000000000000(0000) GS:ffff96d031400000(0000) knlGS:0000000000000000 [ 1.204495] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.204495] CR2: ffff96e277fff000 CR3: 000000103060a001 CR4: 00000000007200b0 [ 1.204495] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.204495] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.204495] Call Trace: [ 1.204495] ? __warn+0x85/0xd0 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? report_bug+0xb6/0x130 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? fixup_bug.part.12+0x18/0x30 [ 1.204495] ? do_error_trap+0x95/0xb0 [ 1.204495] ? do_invalid_op+0x36/0x40 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? invalid_op+0x1e/0x30 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] identify_cpu+0x422/0x510 [ 1.204495] identify_boot_cpu+0xc/0x94 [ 1.204495] arch_cpu_finalize_init+0x5/0x47 [ 1.204495] start_kernel+0x468/0x511 [ 1.204495] secondary_startup_64+0xa4/0xb0 [ 1.204495] ---[ end trace dffac81ff531fcf2 ]---The issue can be easily reproduced on both virtualized and bare metal instances but interesting thing is
it can’t be found in other latest stable kernels v4.14, v4.19, v5.15 and newer. We tried to bisect between v5.4.251 and v5.4.252 and were able to find below commit to be the culprit. Also, reverting it in v5.4.252 and v5.10.189 resolved above warnings completely.x86/fpu: Move FPU initialization into
arch_cpu_finalize_init()commitb81fac906a8f9e682e513ddd95697ec7a20878d4upstreamWe used to speculate the fix might be similar to commit
3f8968f1f0ad(“x86/xen: Fix secondary processors' FPU initialization”) but since only kernel 5.4/5.10 are impacted, we’re not quite sure how this commit affects them in practice. Could you please take a look and share your insights?Also put stack traces from v5.10.189:
[ 1.210910] ------------[ cut here ]------------ [ 1.210910] get of unsupported state [ 1.210910] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:974 get_xsave_addr+0x89/0xa0 [ 1.210910] Modules linked in: [ 1.210910] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.10.189 #4 [ 1.210910] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.210910] RIP: 0010:get_xsave_addr+0x89/0xa0 [ 1.210910] Code: c4 08 31 c0 5b e9 17 a4 bc 00 80 3d e7 75 eb 01 00 75 b9 48 c7 c7 b7 f4 09 ab 89 4c 24 04 c6 05 d3 75 eb 01 01 e8 17 98 05 00 <0f> 0b 48 63 4c 24 04 eb 99 31 c0 e9 e7 a3 bc 00 0f 1f 80 00 00 00 [ 1.210910] RSP: 0000:ffffffffab603ec8 EFLAGS: 00010286 [ 1.210910] RAX: 0000000000000000 RBX: ffffffffabf25bc0 RCX: 00000000fffeffff [ 1.210910] RDX: ffffffffab603cd0 RSI: 00000000fffeffff RDI: ffffffffad1a3dec [ 1.210910] RBP: ffffffffabf25a60 R08: 0000000000000000 R09: 0000000000000001 [ 1.210910] R10: 0000000000000000 R11: ffffffffab603cc8 R12: ffffffffac539b40 [ 1.210910] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.210910] FS: 0000000000000000(0000) GS:ffff9150f1600000(0000) knlGS:0000000000000000 [ 1.210910] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.210910] CR2: ffff915702801000 CR3: 0000001780610001 CR4: 00000000007300b0 [ 1.210910] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.210910] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.210910] Call Trace: [ 1.210910] ? __warn+0x7d/0xe0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? report_bug+0xbb/0x140 [ 1.210910] ? handle_bug+0x3f/0x70 [ 1.210910] ? exc_invalid_op+0x13/0x60 [ 1.210910] ? asm_exc_invalid_op+0x12/0x20Quoted 8 lines
[ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] identify_cpu+0x42a/0x550 [ 1.210910] identify_boot_cpu+0xc/0x94 [ 1.210910] arch_cpu_finalize_init+0x5/0x47 [ 1.210910] start_kernel+0x4bc/0x56b [ 1.210910] secondary_startup_64_no_verify+0xb0/0xbb [ 1.210910] ---[ end trace 14850c6f8ee0875d ]---
Quoted 5 lines
I think this is fixed with commit
b3607269ff57("x86/pkeys: Reverta5eff7259790("x86/pkeys: Add PKRU value toinit_fpstate")"), which is queued up for the next 5.4 and 5.10.y releases to happen "soon". Can you test the released -rc1 versions of this to verify it is resolved or not?
While not the reporter, I can confirm that the commit resolved the issue.
The issue was reported some days back in Debian as
https://bugs.debian.org/1044518
I verified that with 5.10.190-rc1 the above warning is gone:
https://bugs.debian.org/1044518#34
(as it was fixed already with 5.10.190-rc1 pending, I did not botherred to as well report it upstream after it was clear it is not a Debian specific issue anymore).
Regards,
Salvatore
Re: Linux 5.4.252 FPU initialization warnings in stable kernels 5.4/5.10
In reply to Greg KHQuoted 99 lines · On 2023-08-15, 2:17 PM, "Greg KH" <[email protected]…
Quoted 81 lines · Shaoying Xu
Hi Thomas/Greg
We are seeing “get of unsupported state” warnings during FPU initialization in the v5.4.252 and v5.10.189 kernel booted on AWS EC2 instances with Intel processors based on Nitro system. These warnings are observed in EC2 c5.18xlarge instance:
[ 1.204495] ------------[ cut here ]------------ [ 1.204495] get of unsupported state [ 1.204495] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:879 get_xsave_addr+0x81/0x90 [ 1.204495] Modules linked in: [ 1.204495] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.252 #10 [ 1.204495] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.204495] RIP: 0010:get_xsave_addr+0x81/0x90 [ 1.204495] Code: 5b c3 48 83 c4 08 31 c0 5b c3 80 3d 7c f0 78 01 00 75 c1 48 c7 c7 34 be 03 b2 89 4c 24 04 c6 05 68 f0 78 01 01 e8 ef 41 05 00 <0f> > 0b 48 63 4c 24 04 eb a1 31 c0 c3 0f 1f 00 0f 1f 44 00 00 41 54 [ 1.204495] RSP: 0000:ffffffffb2603ed0 EFLAGS: 00010282 [ 1.204495] RAX: 0000000000000000 RBX: ffffffffb27ebe80 RCX: 0000000047cb2486 [ 1.204495] RDX: 0000000000000018 RSI: ffffffffb39e99a0 RDI: ffffffffb39e756c [ 1.204495] RBP: ffffffffb27ebd40 R08: 7520666f20746567 R09: 74726f707075736e [ 1.204495] R10: 00000000000962fc R11: 6574617473206465 R12: ffffffffb2d89b60 [ 1.204495] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.204495] FS: 0000000000000000(0000) GS:ffff96d031400000(0000) knlGS:0000000000000000 [ 1.204495] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.204495] CR2: ffff96e277fff000 CR3: 000000103060a001 CR4: 00000000007200b0 [ 1.204495] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.204495] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.204495] Call Trace: [ 1.204495] ? __warn+0x85/0xd0 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? report_bug+0xb6/0x130 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? fixup_bug.part.12+0x18/0x30 [ 1.204495] ? do_error_trap+0x95/0xb0 [ 1.204495] ? do_invalid_op+0x36/0x40 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] ? invalid_op+0x1e/0x30 [ 1.204495] ? get_xsave_addr+0x81/0x90 [ 1.204495] identify_cpu+0x422/0x510 [ 1.204495] identify_boot_cpu+0xc/0x94 [ 1.204495] arch_cpu_finalize_init+0x5/0x47 [ 1.204495] start_kernel+0x468/0x511 [ 1.204495] secondary_startup_64+0xa4/0xb0 [ 1.204495] ---[ end trace dffac81ff531fcf2 ]---The issue can be easily reproduced on both virtualized and bare metal instances but interesting thing is
it can’t be found in other latest stable kernels v4.14, v4.19, v5.15 and newer. We tried to bisect between v5.4.251 and v5.4.252 and were able to find below commit to be the culprit. Also, reverting it in v5.4.252 and v5.10.189 resolved above warnings completely.x86/fpu: Move FPU initialization into
arch_cpu_finalize_init()commitb81fac906a8f9e682e513ddd95697ec7a20878d4upstreamWe used to speculate the fix might be similar to commit
3f8968f1f0ad(“x86/xen: Fix secondary processors' FPU initialization”) but since only kernel 5.4/5.10 are impacted, we’re not quite sure how this commit affects them in practice. Could you please take a look and share your insights?Also put stack traces from v5.10.189:
[ 1.210910] ------------[ cut here ]------------ [ 1.210910] get of unsupported state [ 1.210910] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/fpu/xstate.c:974 get_xsave_addr+0x89/0xa0 [ 1.210910] Modules linked in: [ 1.210910] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.10.189 #4 [ 1.210910] Hardware name: Amazon EC2 c5.18xlarge/, BIOS 1.0 10/16/2017 [ 1.210910] RIP: 0010:get_xsave_addr+0x89/0xa0 [ 1.210910] Code: c4 08 31 c0 5b e9 17 a4 bc 00 80 3d e7 75 eb 01 00 75 b9 48 c7 c7 b7 f4 09 ab 89 4c 24 04 c6 05 d3 75 eb 01 01 e8 17 98 05 00 <0f> > 0b 48 63 4c 24 04 eb 99 31 c0 e9 e7 a3 bc 00 0f 1f 80 00 00 00 [ 1.210910] RSP: 0000:ffffffffab603ec8 EFLAGS: 00010286 [ 1.210910] RAX: 0000000000000000 RBX: ffffffffabf25bc0 RCX: 00000000fffeffff [ 1.210910] RDX: ffffffffab603cd0 RSI: 00000000fffeffff RDI: ffffffffad1a3dec [ 1.210910] RBP: ffffffffabf25a60 R08: 0000000000000000 R09: 0000000000000001 [ 1.210910] R10: 0000000000000000 R11: ffffffffab603cc8 R12: ffffffffac539b40 [ 1.210910] R13: 0000000000000246 R14: 0000000000000000 R15: 0000000000000000 [ 1.210910] FS: 0000000000000000(0000) GS:ffff9150f1600000(0000) knlGS:0000000000000000 [ 1.210910] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.210910] CR2: ffff915702801000 CR3: 0000001780610001 CR4: 00000000007300b0 [ 1.210910] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.210910] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.210910] Call Trace: [ 1.210910] ? __warn+0x7d/0xe0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? report_bug+0xbb/0x140 [ 1.210910] ? handle_bug+0x3f/0x70 [ 1.210910] ? exc_invalid_op+0x13/0x60 [ 1.210910] ? asm_exc_invalid_op+0x12/0x20Quoted 8 lines
[ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] ? get_xsave_addr+0x89/0xa0 [ 1.210910] identify_cpu+0x42a/0x550 [ 1.210910] identify_boot_cpu+0xc/0x94 [ 1.210910] arch_cpu_finalize_init+0x5/0x47 [ 1.210910] start_kernel+0x4bc/0x56b [ 1.210910] secondary_startup_64_no_verify+0xb0/0xbb [ 1.210910] ---[ end trace 14850c6f8ee0875d ]---I think this is fixed with commit
b3607269ff57("x86/pkeys: Reverta5eff7259790("x86/pkeys: Add PKRU value toinit_fpstate")"), which is queued up for the next 5.4 and 5.10.y releases to happen "soon". Can you test the released -rc1 versions of this to verify it is resolved or not?
Quoted 4 lines
thanks,
greg k-h
Hi Greg,
Thank you for pointing this commit. I verfied v5.4.254-rc1 and v5.10.191-rc1 on the same EC2 c5.18xlarge instance would no longer reproduce above warnings. In addition, I tested v5.4.252 and v5.10.189 plus commit b3607269ff57 ("x86/pkeys: Revert a5eff7259790 ("x86/pkeys: Add PKRU value to init_fpstate")") and found fpu initilization was clean. It can be confirmed that this commit resolves the reported issue.
Thanks,
Shaoying