[SRU artful/linux] switch Spectre V2 mitigation to retpoline
Andy Whitcroft
apw at canonical.com
Mon Feb 5 09:39:58 UTC 2018
Now that retpoline has made it to stable it is appropriate we switch
over to this for mitigation of Spectre V2. This form is meant to have a
significantly lower performance penalty, and also does not require
microcode support from the processor.
This is a large patchset as it has to revert the existing mitigations for
Spectre V1 and V2 as these are intertwined. We take advantage of this
to reapply a slightly updated Spectre V1 mitigation and to more clearly
identify those patches for when they are themselves replaced by final
upstream versions. Finally testing of this set threw up a procfs bug
(LP: #1747263) which though not actuall a regression I am including as
it breaks ADT testing.
The patches are split into 4 sections, each set has been marked up such
that they fall out separatly in the Ubuntu change (which is included in
the pull request at the end of this email).
* CVE-2017-5715 (revert embargoed) // CVE-2017-5753 (revert embargoed)
* CVE-2017-5715 (Spectre v2 retpoline)
* CVE-2017-5753 (Spectre v1 Intel)
* [artful] panic in update_stack_state when reading /proc/<pid>/stack on i386
Full pull-request is below. Proposing for SRU to artful/linux.
-apw
The following changes since commit b9f7706e18abb6276a87776e15596fa898cbafa4:
x86/mm: Fix overlap of i386 CPU_ENTRY_AREA with FIX_BTMAP (2018-02-02 17:14:07 +0100)
are available in the Git repository at:
https://git.launchpad.net/~apw/ubuntu/+source/linux/+git/pti pti/artful-retpoline-intelv1--pull
for you to fetch changes up to c50da22ff258fea6938eda9b3fc0475288b3ee7d:
x86/unwind: Fix dereference of untrusted pointer (2018-02-04 14:47:15 +0000)
----------------------------------------------------------------
* [artful] panic in update_stack_state when reading /proc/<pid>/stack on i386
(LP: #1747263)
- x86/unwind: Fix dereference of untrusted pointer
* CVE-2017-5753 (Spectre v1 Intel)
- x86/cpu/AMD: Remove now unused definition of MFENCE_RDTSC feature
- SAUCE: reinstate MFENCE_RDTSC feature definition
- locking/barriers: introduce new observable speculation barrier
- bpf: prevent speculative execution in eBPF interpreter
- x86, bpf, jit: prevent speculative execution when JIT is enabled
- SAUCE: FIX: x86, bpf, jit: prevent speculative execution when JIT is enabled
- uvcvideo: prevent speculative execution
- carl9170: prevent speculative execution
- p54: prevent speculative execution
- qla2xxx: prevent speculative execution
- cw1200: prevent speculative execution
- Thermal/int340x: prevent speculative execution
- ipv4: prevent speculative execution
- ipv6: prevent speculative execution
- fs: prevent speculative execution
- net: mpls: prevent speculative execution
- udf: prevent speculative execution
- userns: prevent speculative execution
- powerpc: add osb barrier
- s390/spinlock: add osb memory barrier
- SAUCE: claim mitigation via observable speculation barrier
* CVE-2017-5715 (Spectre v2 retpoline)
- x86/asm: Fix inline asm call constraints for Clang
- kvm: vmx: Scrub hardware GPRs at VM-exit
- sysfs/cpu: Add vulnerability folder
- x86/cpu: Implement CPU vulnerabilites sysfs functions
- x86/tboot: Unbreak tboot with PTI enabled
- objtool: Detect jumps to retpoline thunks
- objtool: Allow alternatives to be ignored
- x86/retpoline: Add initial retpoline support
- x86/spectre: Add boot time option to select Spectre v2 mitigation
- x86/retpoline/crypto: Convert crypto assembler indirect jumps
- x86/retpoline/entry: Convert entry assembler indirect jumps
- x86/retpoline/ftrace: Convert ftrace assembler indirect jumps
- x86/retpoline/hyperv: Convert assembler indirect jumps
- fix! x86/retpoline/hyperv: Convert assembler indirect jumps
- x86/retpoline/xen: Convert Xen hypercall indirect jumps
- x86/retpoline/checksum32: Convert assembler indirect jumps
- x86/retpoline/irq32: Convert assembler indirect jumps
- x86/retpoline: Fill return stack buffer on vmexit
- selftests/x86: Add test_vsyscall
- x86/pti: Fix !PCID and sanitize defines
- security/Kconfig: Correct the Documentation reference for PTI
- x86,perf: Disable intel_bts when PTI
- x86/retpoline: Remove compile time warning
- [Config] enable CONFIG_GENERIC_CPU_VULNERABILITIES
- [Config] enable CONFIG_RETPOLINE
- [Packaging] retpoline -- add call site validation
- [Config] disable retpoline checks for first upload
* CVE-2017-5715 (revert embargoed) // CVE-2017-5753 (revert embargoed)
- Revert "UBUNTU: SAUCE: x86/entry: Fix up retpoline assembler labels"
- Revert "kvm: vmx: Scrub hardware GPRs at VM-exit"
- Revert "Revert "x86/svm: Add code to clear registers on VM exit""
- Revert "UBUNTU: SAUCE: x86/microcode: Extend post microcode reload to
support IBPB feature -- repair missmerge"
- Revert "UBUNTU: SAUCE: x86/kvm: Fix stuff_RSB() for 32-bit"
- Revert "s390/spinlock: add gmb memory barrier"
- Revert "powerpc: add gmb barrier"
- Revert "x86/cpu/AMD: Remove now unused definition of MFENCE_RDTSC feature"
- Revert "x86/svm: Add code to clear registers on VM exit"
- Revert "x86/svm: Add code to clobber the RSB on VM exit"
- Revert "KVM: x86: Add speculative control CPUID support for guests"
- Revert "x86/svm: Set IBPB when running a different VCPU"
- Revert "x86/svm: Set IBRS value on VM entry and exit"
- Revert "KVM: SVM: Do not intercept new speculative control MSRs"
- Revert "x86/microcode: Extend post microcode reload to support IBPB feature"
- Revert "x86/cpu/AMD: Add speculative control support for AMD"
- Revert "x86/entry: Use retpoline for syscall's indirect calls"
- Revert "x86/syscall: Clear unused extra registers on 32-bit compatible
syscall entrance"
- Revert "x86/syscall: Clear unused extra registers on syscall entrance"
- Revert "x86/spec_ctrl: Add lock to serialize changes to ibrs and ibpb
control"
- Revert "x86/spec_ctrl: Add sysctl knobs to enable/disable SPEC_CTRL feature"
- Revert "x86/kvm: Pad RSB on VM transition"
- Revert "x86/kvm: Toggle IBRS on VM entry and exit"
- Revert "x86/kvm: Set IBPB when switching VM"
- Revert "x86/kvm: add MSR_IA32_SPEC_CTRL and MSR_IA32_PRED_CMD to kvm"
- Revert "x86/entry: Stuff RSB for entry to kernel for non-SMEP platform"
- Revert "x86/mm: Only set IBPB when the new thread cannot ptrace current
thread"
- Revert "x86/mm: Set IBPB upon context switch"
- Revert "x86/idle: Disable IBRS when offlining cpu and re-enable on wakeup"
- Revert "x86/idle: Disable IBRS entering idle and enable it on wakeup"
- Revert "x86/enter: Use IBRS on syscall and interrupts"
- Revert "x86/enter: MACROS to set/clear IBRS and set IBPB"
- Revert "x86/feature: Report presence of IBPB and IBRS control"
- Revert "x86/feature: Enable the x86 feature to control Speculation"
- Revert "udf: prevent speculative execution"
- Revert "net: mpls: prevent speculative execution"
- Revert "fs: prevent speculative execution"
- Revert "ipv6: prevent speculative execution"
- Revert "userns: prevent speculative execution"
- Revert "Thermal/int340x: prevent speculative execution"
- Revert "cw1200: prevent speculative execution"
- Revert "qla2xxx: prevent speculative execution"
- Revert "p54: prevent speculative execution"
- Revert "carl9170: prevent speculative execution"
- Revert "uvcvideo: prevent speculative execution"
- Revert "x86, bpf, jit: prevent speculative execution when JIT is enabled"
- Revert "bpf: prevent speculative execution in eBPF interpreter"
- Revert "locking/barriers: introduce new memory barrier gmb()"
More information about the kernel-team
mailing list