forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'speck-v20' of git://git.kernel.org/pub/scm/linux/kernel…
…/git/tip/tip Merge speculative store buffer bypass fixes from Thomas Gleixner: - rework of the SPEC_CTRL MSR management to accomodate the new fancy SSBD (Speculative Store Bypass Disable) bit handling. - the CPU bug and sysfs infrastructure for the exciting new Speculative Store Bypass 'feature'. - support for disabling SSB via LS_CFG MSR on AMD CPUs including Hyperthread synchronization on ZEN. - PRCTL support for dynamic runtime control of SSB - SECCOMP integration to automatically disable SSB for sandboxed processes with a filter flag for opt-out. - KVM integration to allow guests fiddling with SSBD including the new software MSR VIRT_SPEC_CTRL to handle the LS_CFG based oddities on AMD. - BPF protection against SSB .. this is just the core and x86 side, other architecture support will come separately. * 'speck-v20' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (49 commits) bpf: Prevent memory disambiguation attack x86/bugs: Rename SSBD_NO to SSB_NO KVM: SVM: Implement VIRT_SPEC_CTRL support for SSBD x86/speculation, KVM: Implement support for VIRT_SPEC_CTRL/LS_CFG x86/bugs: Rework spec_ctrl base and mask logic x86/bugs: Remove x86_spec_ctrl_set() x86/bugs: Expose x86_spec_ctrl_base directly x86/bugs: Unify x86_spec_ctrl_{set_guest,restore_host} x86/speculation: Rework speculative_store_bypass_update() x86/speculation: Add virtualized speculative store bypass disable support x86/bugs, KVM: Extend speculation control for VIRT_SPEC_CTRL x86/speculation: Handle HT correctly on AMD x86/cpufeatures: Add FEATURE_ZEN x86/cpufeatures: Disentangle SSBD enumeration x86/cpufeatures: Disentangle MSR_SPEC_CTRL enumeration from IBRS x86/speculation: Use synthetic bits for IBRS/IBPB/STIBP KVM: SVM: Move spec control call after restore of GS x86/cpu: Make alternative_msr_write work for 32-bit code x86/bugs: Fix the parameters alignment and missing void x86/bugs: Make cpu_show_common() static ...
- Loading branch information
Showing
34 changed files
with
1,166 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -478,6 +478,7 @@ What: /sys/devices/system/cpu/vulnerabilities | |
/sys/devices/system/cpu/vulnerabilities/meltdown | ||
/sys/devices/system/cpu/vulnerabilities/spectre_v1 | ||
/sys/devices/system/cpu/vulnerabilities/spectre_v2 | ||
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass | ||
Date: January 2018 | ||
Contact: Linux kernel mailing list <[email protected]> | ||
Description: Information about CPU vulnerabilities | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
=================== | ||
Speculation Control | ||
=================== | ||
|
||
Quite some CPUs have speculation-related misfeatures which are in | ||
fact vulnerabilities causing data leaks in various forms even across | ||
privilege domains. | ||
|
||
The kernel provides mitigation for such vulnerabilities in various | ||
forms. Some of these mitigations are compile-time configurable and some | ||
can be supplied on the kernel command line. | ||
|
||
There is also a class of mitigations which are very expensive, but they can | ||
be restricted to a certain set of processes or tasks in controlled | ||
environments. The mechanism to control these mitigations is via | ||
:manpage:`prctl(2)`. | ||
|
||
There are two prctl options which are related to this: | ||
|
||
* PR_GET_SPECULATION_CTRL | ||
|
||
* PR_SET_SPECULATION_CTRL | ||
|
||
PR_GET_SPECULATION_CTRL | ||
----------------------- | ||
|
||
PR_GET_SPECULATION_CTRL returns the state of the speculation misfeature | ||
which is selected with arg2 of prctl(2). The return value uses bits 0-3 with | ||
the following meaning: | ||
|
||
==== ===================== =================================================== | ||
Bit Define Description | ||
==== ===================== =================================================== | ||
0 PR_SPEC_PRCTL Mitigation can be controlled per task by | ||
PR_SET_SPECULATION_CTRL. | ||
1 PR_SPEC_ENABLE The speculation feature is enabled, mitigation is | ||
disabled. | ||
2 PR_SPEC_DISABLE The speculation feature is disabled, mitigation is | ||
enabled. | ||
3 PR_SPEC_FORCE_DISABLE Same as PR_SPEC_DISABLE, but cannot be undone. A | ||
subsequent prctl(..., PR_SPEC_ENABLE) will fail. | ||
==== ===================== =================================================== | ||
|
||
If all bits are 0 the CPU is not affected by the speculation misfeature. | ||
|
||
If PR_SPEC_PRCTL is set, then the per-task control of the mitigation is | ||
available. If not set, prctl(PR_SET_SPECULATION_CTRL) for the speculation | ||
misfeature will fail. | ||
|
||
PR_SET_SPECULATION_CTRL | ||
----------------------- | ||
|
||
PR_SET_SPECULATION_CTRL allows to control the speculation misfeature, which | ||
is selected by arg2 of :manpage:`prctl(2)` per task. arg3 is used to hand | ||
in the control value, i.e. either PR_SPEC_ENABLE or PR_SPEC_DISABLE or | ||
PR_SPEC_FORCE_DISABLE. | ||
|
||
Common error codes | ||
------------------ | ||
======= ================================================================= | ||
Value Meaning | ||
======= ================================================================= | ||
EINVAL The prctl is not implemented by the architecture or unused | ||
prctl(2) arguments are not 0. | ||
|
||
ENODEV arg2 is selecting a not supported speculation misfeature. | ||
======= ================================================================= | ||
|
||
PR_SET_SPECULATION_CTRL error codes | ||
----------------------------------- | ||
======= ================================================================= | ||
Value Meaning | ||
======= ================================================================= | ||
0 Success | ||
|
||
ERANGE arg3 is incorrect, i.e. it's neither PR_SPEC_ENABLE nor | ||
PR_SPEC_DISABLE nor PR_SPEC_FORCE_DISABLE. | ||
|
||
ENXIO Control of the selected speculation misfeature is not possible. | ||
See PR_GET_SPECULATION_CTRL. | ||
|
||
EPERM Speculation was disabled with PR_SPEC_FORCE_DISABLE and caller | ||
tried to enable it again. | ||
======= ================================================================= | ||
|
||
Speculation misfeature controls | ||
------------------------------- | ||
- PR_SPEC_STORE_BYPASS: Speculative Store Bypass | ||
|
||
Invocations: | ||
* prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, 0, 0, 0); | ||
* prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_ENABLE, 0, 0); | ||
* prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0); | ||
* prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_FORCE_DISABLE, 0, 0); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.