x86 fixes
Subsystems (4)
Linus,
Please pull the latest x86/urgent git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-urgent-2020-08-15
# HEAD: a6d996cbd38b42341ad3fce74506b9fdc280e395 x86/alternatives: Acquire pte lock with interrupts enabled
Misc fixes and small updates all around the place:
- Fix mitigation state sysfs output
- Fix an FPU xstate/sxave code assumption bug triggered by Architectural LBR support
- Fix Lightning Mountain SoC TSC frequency enumeration bug
- Fix kexec debug output
- Fix kexec memory range assumption bug
- Fix a boundary condition in the crash kernel code
- Optimize porgatory.ro generation a bit
- Enable ACRN guests to use X2APIC mode
- Reduce a __text_poke() IRQs-off critical section for the benefit of PREEMPT_RT
Thanks,
Ingo
------------------>
Dilip Kota (1):
x86/tsr: Fix tsc frequency enumeration bug on Lightning Mountain SoC
Kan Liang (1):
x86/fpu/xstate: Fix an xstate size check warning with architectural LBRs
Lianbo Jiang (3):
x86/crash: Correct the address boundary of function parameters
kexec: Improve & fix crash_exclude_mem_range() to handle overlapping ranges
kexec_file: Correctly output debugging information for the PT_LOAD ELF header
Pawan Gupta (1):
x86/bugs/multihit: Fix mitigation reporting when VMX is not in use
Pingfan Liu (1):
x86/purgatory: Don't generate debug info for purgatory.ro
Sebastian Andrzej Siewior (1):
x86/alternatives: Acquire pte lock with interrupts enabled
Shuo Liu (2):
x86/acrn: Allow ACRN guest to use X2APIC mode x86/acrn: Remove redundant chars from ACRN signature
Documentation/admin-guide/hw-vuln/multihit.rst | 4 +++ arch/x86/kernel/alternative.c | 6 ++-- arch/x86/kernel/cpu/acrn.c | 12 +++----- arch/x86/kernel/cpu/bugs.c | 8 ++++- arch/x86/kernel/crash.c | 2 +- arch/x86/kernel/fpu/xstate.c | 33 ++++++++++++++++++++- arch/x86/kernel/tsc_msr.c | 9 ++++-- arch/x86/purgatory/Makefile | 5 +++- kernel/kexec_file.c | 41 ++++++++++++++++---------- 9 files changed, 88 insertions(+), 32 deletions(-)
Documentation/admin-guide/hw-vuln/multihit.rst +4 -0
@@ -80,6 +80,10 @@ The possible values in this file are: - The processor is not vulnerable. * - KVM: Mitigation: Split huge pages - Software changes mitigate this issue. + * - KVM: Mitigation: VMX unsupported + - KVM is not vulnerable because Virtual Machine Extensions (VMX) is not supported. + * - KVM: Mitigation: VMX disabled + - KVM is not vulnerable because Virtual Machine Extensions (VMX) is disabled. * - KVM: Vulnerable - The processor is vulnerable, but no mitigation enabled
arch/x86/kernel/alternative.c +3 -3
@@ -874,8 +874,6 @@ static void *__text_poke(void *addr, const void *opcode, size_t len)*/ BUG_ON (!pages[0 ] || (cross_page_boundary && !pages[1 ])); -local_irq_save (flags); -/* * Map the page without the global bit, as TLB flushing is done with * flush_tlb_mm_range(), which is intended for non-global PTEs.
@@ -892,6 +890,8 @@ static void *__text_poke(void *addr, const void *opcode, size_t len)*/ VM_BUG_ON (!ptep); +local_irq_save (flags); + pte =mk_pte (pages[0 ], pgprot);set_pte_at (poking_mm, poking_addr, ptep, pte);
@@ -941,8 +941,8 @@ static void *__text_poke(void *addr, const void *opcode, size_t len)*/ BUG_ON (memcmp (addr, opcode, len)); -pte_unmap_unlock (ptep, ptl);local_irq_restore (flags); +pte_unmap_unlock (ptep, ptl);return addr; }
arch/x86/kernel/cpu/acrn.c +4 -8
@@ -11,14 +11,15 @@#include <linux/interrupt.h> #include <asm/apic.h> +#include <asm/cpufeatures.h> #include <asm/desc.h> #include <asm/hypervisor.h> #include <asm/idtentry.h> #include <asm/irq_regs.h> -static uint32_t __init acrn_detect (void ) +static u32 __init acrn_detect (void ) { -return hypervisor_cpuid_base ("ACRNACRNACRN\0\0" ,0 ); +return hypervisor_cpuid_base ("ACRNACRNACRN" ,0 ); }static void __init acrn_init_platform (void )
@@ -29,12 +30,7 @@ static void __init acrn_init_platform(void)static bool acrn_x2apic_available (void ) { -/* -* x2apic is not supported for now. Future enablement will have to check -* X86_FEATURE_X2APIC to determine whether x2apic is supported in the -* guest. -*/ -return false; +return boot_cpu_has (X86_FEATURE_X2APIC ); }static void (*acrn_intr_handler)(void );
arch/x86/kernel/cpu/bugs.c +7 -1
@@ -31,6 +31,7 @@#include <asm/intel-family.h> #include <asm/e820/api.h> #include <asm/hypervisor.h> +#include <asm/tlbflush.h> #include "cpu.h"
@@ -1549,7 +1550,12 @@ static ssize_t l1tf_show_state(char *buf)static ssize_t itlb_multihit_show_state (char *buf) { -if (itlb_multihit_kvm_mitigation) +if (!boot_cpu_has (X86_FEATURE_MSR_IA32_FEAT_CTL ) || + !boot_cpu_has (X86_FEATURE_VMX )) +return sprintf (buf,"KVM: Mitigation: VMX unsupported\n" ); +else if (!(cr4_read_shadow () &X86_CR4_VMXE )) +return sprintf (buf,"KVM: Mitigation: VMX disabled\n" ); +else if (itlb_multihit_kvm_mitigation)return sprintf (buf,"KVM: Mitigation: Split huge pages\n" );else return sprintf (buf,"KVM: Vulnerable\n" );
arch/x86/kernel/crash.c +1 -1
@@ -230,7 +230,7 @@ static int elf_header_exclude_ranges(struct crash_mem *cmem)int ret =0 ;/* Exclude the low 1M because it is always reserved */ - ret =crash_exclude_mem_range (cmem,0 ,1 <<20 ); + ret =crash_exclude_mem_range (cmem,0 , (1 <<20 )-1 );if (ret)return ret;
arch/x86/kernel/fpu/xstate.c +32 -1
@@ -611,6 +611,10 @@ static void check_xstate_against_struct(int nr)* This essentially double-checks what the cpu told us about * how large the XSAVE buffer needs to be. We are recalculating * it to be safe. +* +* Dynamic XSAVE features allocate their own buffers and are not +* covered by these checks. Only the size of the buffer for task->fpu +* is checked here. */ static void do_extra_xstate_size_checks (void ) {
@@ -673,6 +677,33 @@ static unsigned int __init get_xsaves_size(void)return ebx; } +/* +* Get the total size of the enabled xstates without the dynamic supervisor +* features. +*/ +static unsigned int __init get_xsaves_size_no_dynamic (void ) +{ +u64 mask =xfeatures_mask_dynamic (); +unsigned int size; + +if (!mask) +return get_xsaves_size (); + +/* Disable dynamic features. */ +wrmsrl (MSR_IA32_XSS ,xfeatures_mask_supervisor ()); + +/* +* Ask the hardware what size is required of the buffer. +* This is the size required for the task->fpu buffer. +*/ + size =get_xsaves_size (); + +/* Re-enable dynamic features so XSAVES will work on them again. */ +wrmsrl (MSR_IA32_XSS ,xfeatures_mask_supervisor () | mask); + +return size; +} +static unsigned int __init get_xsave_size (void ) {unsigned int eax, ebx, ecx, edx;
@@ -710,7 +741,7 @@ static int __init init_xstate_size(void) xsave_size =get_xsave_size ();if (boot_cpu_has (X86_FEATURE_XSAVES )) - possible_xstate_size =get_xsaves_size (); + possible_xstate_size =get_xsaves_size_no_dynamic ();else possible_xstate_size = xsave_size;
arch/x86/kernel/tsc_msr.c +7 -2
@@ -133,10 +133,15 @@ static const struct freq_desc freq_desc_ann = { .mask = 0x0f, }; -/* 24 MHz crystal? : 24 * 13 / 4 = 78 MHz */ +/* +* 24 MHz crystal? : 24 * 13 / 4 = 78 MHz +* Frequency step for Lightning Mountain SoC is fixed to 78 MHz, +* so all the frequency entries are 78000. +*/ static const struct freq_desc freq_desc_lgm = { .use_msr_plat = true, - .freqs = {78000 ,78000 ,78000 ,78000 ,78000 ,78000 ,78000 ,78000 }, + .freqs = {78000 ,78000 ,78000 ,78000 ,78000 ,78000 ,78000 ,78000 , +78000 ,78000 ,78000 ,78000 ,78000 ,78000 ,78000 ,78000 }, .mask =0x0f , };
arch/x86/purgatory/Makefile +4 -1
@@ -32,7 +32,7 @@ KCOV_INSTRUMENT := n # make up the standalone purgatory.ro PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel -PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss +PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss -g0 PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING PURGATORY_CFLAGS += $(call cc-option,-fno-stack-protector)
@@ -64,6 +64,9 @@ CFLAGS_sha256.o += $(PURGATORY_CFLAGS) CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) CFLAGS_string.o += $(PURGATORY_CFLAGS) +AFLAGS_REMOVE_setup-x86_$(BITS).o += -Wa,-gdwarf-2 +AFLAGS_REMOVE_entry64.o += -Wa,-gdwarf-2 + $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE $(call if_changed,ld)
kernel/kexec_file.c +26 -15
101 lines not on this page · raw message
The pull request you sent on Sat, 15 Aug 2020 13:45:52 +0200:
The pull request you sent on Sat, 15 Aug 2020 13:45:52 +0200:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gitx86-urgent-2020-08-15
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/50f6c7dbd973092d8e5f3c89f29eb4bea19fdebd
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/prtracker.html