twx-linux/arch/x86/kernel
Pawan Gupta 6606515742 x86/bugs: Make sure MSR_SPEC_CTRL is updated properly upon resume from S3
The "force" argument to write_spec_ctrl_current() is currently ambiguous
as it does not guarantee the MSR write. This is due to the optimization
that writes to the MSR happen only when the new value differs from the
cached value.

This is fine in most cases, but breaks for S3 resume when the cached MSR
value gets out of sync with the hardware MSR value due to S3 resetting
it.

When x86_spec_ctrl_current is same as x86_spec_ctrl_base, the MSR write
is skipped. Which results in SPEC_CTRL mitigations not getting restored.

Move the MSR write from write_spec_ctrl_current() to a new function that
unconditionally writes to the MSR. Update the callers accordingly and
rename functions.

  [ bp: Rework a bit. ]

Fixes: caa0ff24d5d0 ("x86/bugs: Keep a per-CPU IA32_SPEC_CTRL value")
Suggested-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: <stable@kernel.org>
Link: https://lore.kernel.org/r/806d39b0bfec2fe8f50dc5446dff20f5bb24a959.1669821572.git.pawan.kumar.gupta@linux.intel.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2022-12-02 15:45:33 -08:00
..
acpi ACPI: CPPC: Fix enabling CPPC on AMD systems with shared memory 2022-07-13 21:13:14 +02:00
apic x86/apic: Don't disable x2APIC if locked 2022-08-31 14:34:11 -07:00
cpu x86/bugs: Make sure MSR_SPEC_CTRL is updated properly upon resume from S3 2022-12-02 15:45:33 -08:00
fpu x86/fpu: Drop fpregs lock before inheriting FPU permissions 2022-11-10 16:57:38 +01:00
kprobes x86: kprobes: Remove unused macro stack_addr 2022-09-27 14:48:26 -04:00
.gitignore
alternative.c - Make sure an INT3 is slapped after every unconditional retpoline JMP 2022-10-04 09:46:22 -07:00
amd_gart_64.c x86: Fix various duplicate-word comment typos 2022-08-15 19:17:52 +02:00
amd_nb.c x86/amd_nb: Add AMD PCI IDs for SMN communication 2022-07-20 17:35:40 +02:00
aperture_64.c x86: Fix various duplicate-word comment typos 2022-08-15 19:17:52 +02:00
apm_32.c
asm-offsets_32.c
asm-offsets_64.c
asm-offsets.c KVM: x86: use a separate asm-offsets.c file 2022-11-09 12:10:17 -05:00
audit_64.c
bootflag.c
cfi.c x86: Add support for CONFIG_CFI_CLANG 2022-09-26 10:13:16 -07:00
check.c
cpuid.c
crash_core_32.c
crash_core_64.c
crash_dump_32.c vmcore: convert copy_oldmem_page() to take an iov_iter 2022-04-29 14:37:59 -07:00
crash_dump_64.c vmcore: convert read_from_oldmem() to take an iov_iter 2022-04-29 14:37:59 -07:00
crash.c x86/crash: Fix minor typo/bug in debug message 2022-04-13 19:39:54 +02:00
devicetree.c
doublefault_32.c
dumpstack_32.c
dumpstack_64.c
dumpstack.c - Yu Zhao's Multi-Gen LRU patches are here. They've been under test in 2022-10-10 17:53:04 -07:00
e820.c x86/kexec: Carry forward IMA measurement log on kexec 2022-07-01 15:22:16 +02:00
early_printk.c x86/earlyprintk: Clean up pciserial 2022-08-29 12:19:25 +02:00
early-quirks.c drm/i915/rpl-p: Add PCI IDs 2022-04-19 17:14:09 -07:00
ebda.c
eisa.c
espfix_64.c random: handle archrandom with multiple longs 2022-07-25 13:26:14 +02:00
ftrace_32.S
ftrace_64.S ftrace,kcfi: Separate ftrace_stub() and ftrace_stub_graph() 2022-10-20 17:10:27 +02:00
ftrace.c Tracing updates for 5.20 / 6.0 2022-08-05 09:41:12 -07:00
head32.c
head64.c x86: Clear .brk area at early boot 2022-07-01 11:11:34 +02:00
head_32.S x86/asm/32: Fix ANNOTATE_UNRET_SAFE use on 32-bit 2022-07-13 12:43:26 +02:00
head_64.S objtool: Add entry UNRET validation 2022-06-27 10:34:00 +02:00
hpet.c
hw_breakpoint.c
i8237.c
i8253.c
i8259.c
idt.c x86/traps: Add #VE support for TDX guest 2022-04-07 08:27:51 -07:00
io_delay.c
ioport.c
irq_32.c asm-generic: Conditionally enable do_softirq_own_stack() via Kconfig. 2022-09-05 17:20:55 +02:00
irq_64.c
irq_work.c
irq.c
irqflags.S
irqinit.c
itmt.c
jailhouse.c
jump_label.c jump_label: make initial NOP patching the special case 2022-06-24 09:48:55 +02:00
kdebugfs.c
kexec-bzimage64.c integrity-v6.0 2022-08-02 15:21:18 -07:00
kgdb.c
ksysfs.c
kvm.c x86: kvm: remove NULL check before kfree 2022-06-20 06:22:04 -04:00
kvmclock.c x86/kvm: Don't waste kvmclock memory if there is nopv parameter 2022-04-13 13:37:19 -04:00
ldt.c
machine_kexec_32.c
machine_kexec_64.c x86/kexec: fix memory leak of elf header buffer 2022-06-01 15:57:16 -07:00
Makefile - Yu Zhao's Multi-Gen LRU patches are here. They've been under test in 2022-10-10 17:53:04 -07:00
mmconf-fam10h_64.c
module.c treewide: use prandom_u32_max() when possible, part 1 2022-10-11 17:42:55 -06:00
mpparse.c
msr.c
nmi_selftest.c
nmi.c x86/nmi: Make register_nmi_handler() more robust 2022-05-17 09:25:25 +02:00
paravirt-spinlocks.c
paravirt.c
pci-dma.c swiotlb: merge swiotlb-xen initialization into swiotlb 2022-04-18 07:21:13 +02:00
pcspeaker.c
perf_regs.c
platform-quirks.c
pmem.c x86/pmem: Fix platform-device leak in error path 2022-06-20 18:01:16 +02:00
probe_roms.c x86/kernel: Validate ROM memory before accessing when SEV-SNP is active 2022-04-06 13:23:09 +02:00
process_32.c - Remove all the code around GS switching on 32-bit now that it is not 2022-05-23 18:42:07 -07:00
process_64.c x86: kmsan: skip shadow checks in __switch_to() 2022-10-03 14:03:24 -07:00
process.c x86/bugs: Make sure MSR_SPEC_CTRL is updated properly upon resume from S3 2022-12-02 15:45:33 -08:00
process.h
ptrace.c x86/32: Remove lazy GS macros 2022-04-14 14:09:43 +02:00
pvclock.c
quirks.c
reboot_fixups_32.c
reboot.c x86: Use do_kernel_power_off() 2022-05-19 19:30:31 +02:00
relocate_kernel_32.S x86/kexec: Disable RET on kexec 2022-07-09 13:12:32 +02:00
relocate_kernel_64.S x86/kexec: Disable RET on kexec 2022-07-09 13:12:32 +02:00
resource.c x86/PCI: Revert "x86/PCI: Clip only host bridge windows for E820 regions" 2022-06-17 14:24:14 -05:00
rethook.c
rtc.c x86/rtc: Rename mach_set_rtc_mmss() to mach_set_cmos_time() 2022-08-14 11:24:29 +02:00
setup_percpu.c
setup.c x86/setup: Use rng seeds from setup_data 2022-07-11 09:59:31 +02:00
sev_verify_cbit.S
sev-shared.c Revert "x86/sev: Expose sev_es_ghcb_hv_call() for use by HyperV" 2022-07-27 18:09:13 +02:00
sev.c x86/sev: Mark snp_abort() noreturn 2022-08-25 15:54:03 +02:00
signal_compat.c signal: Deliver SIGTRAP on perf event asynchronously if blocked 2022-04-22 12:14:05 +02:00
signal.c x86/32: Remove lazy GS macros 2022-04-14 14:09:43 +02:00
smp.c
smpboot.c smp: add set_nr_cpu_ids() 2022-09-19 17:51:53 -07:00
stacktrace.c
static_call.c x86/static_call: Serialize __static_call_fixup() properly 2022-07-12 14:23:32 +02:00
step.c ptrace: Reimplement PTRACE_KILL by always sending SIGKILL 2022-05-11 14:34:28 -05:00
sys_ia32.c
sys_x86_64.c x86/mm: Cleanup the control_va_addr_alignment() __setup handler 2022-05-04 18:20:42 +02:00
tboot.c mm: remove rb tree. 2022-09-26 19:46:16 -07:00
time.c
tls.c
tls.h
topology.c
trace_clock.c
trace.c
tracepoint.c x86/traceponit: Fix comment about irq vector tracepoints 2022-05-26 22:03:52 -04:00
traps.c x86/traps: avoid KMSAN bugs originating from handle_bug() 2022-11-08 15:57:24 -08:00
tsc_msr.c
tsc_sync.c
tsc.c
umip.c
unwind_frame.c x86: kmsan: don't instrument stack walking functions 2022-10-03 14:03:25 -07:00
unwind_guess.c
unwind_orc.c x86/unwind/orc: Fix unreliable stack dump with gcov 2022-10-21 14:56:42 +02:00
uprobes.c
verify_cpu.S
vm86_32.c x86/32: Remove lazy GS macros 2022-04-14 14:09:43 +02:00
vmlinux.lds.S Just when you thought that all the speculation bugs were addressed and 2022-07-11 18:15:25 -07:00
vsmp_64.c
x86_init.c x86/rtc: Rename mach_set_rtc_mmss() to mach_set_cmos_time() 2022-08-14 11:24:29 +02:00