diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-03-05 15:50:34 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-03-05 15:50:34 -0500 |
| commit | edaed168e135f8ec87b27b567a367cbb041f2243 (patch) | |
| tree | dc56708c4a2c6ace03c8a7211e941c8911a17092 /arch/x86/kernel/process.c | |
| parent | 78f860135433a8bba406352fbdcea8e8980583bf (diff) | |
| parent | 71368af9027f18fe5d1c6f372cfdff7e4bde8b48 (diff) | |
Merge branch 'x86-pti-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86/pti update from Thomas Gleixner:
"Just a single change from the anti-performance departement:
- Add a new PR_SPEC_DISABLE_NOEXEC option which allows to apply the
speculation protections on a process without inheriting the state
on exec.
This remedies a situation where a Java-launcher has speculation
protections enabled because that's the default for JVMs which
causes the launched regular harmless processes to inherit the
protection state which results in unintended performance
degradation"
* 'x86-pti-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/speculation: Add PR_SPEC_DISABLE_NOEXEC
Diffstat (limited to 'arch/x86/kernel/process.c')
| -rw-r--r-- | arch/x86/kernel/process.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 90ae0ca51083..58ac7be52c7a 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
| @@ -255,6 +255,18 @@ void arch_setup_new_exec(void) | |||
| 255 | /* If cpuid was previously disabled for this task, re-enable it. */ | 255 | /* If cpuid was previously disabled for this task, re-enable it. */ |
| 256 | if (test_thread_flag(TIF_NOCPUID)) | 256 | if (test_thread_flag(TIF_NOCPUID)) |
| 257 | enable_cpuid(); | 257 | enable_cpuid(); |
| 258 | |||
| 259 | /* | ||
| 260 | * Don't inherit TIF_SSBD across exec boundary when | ||
| 261 | * PR_SPEC_DISABLE_NOEXEC is used. | ||
| 262 | */ | ||
| 263 | if (test_thread_flag(TIF_SSBD) && | ||
| 264 | task_spec_ssb_noexec(current)) { | ||
| 265 | clear_thread_flag(TIF_SSBD); | ||
| 266 | task_clear_spec_ssb_disable(current); | ||
| 267 | task_clear_spec_ssb_noexec(current); | ||
| 268 | speculation_ctrl_update(task_thread_info(current)->flags); | ||
| 269 | } | ||
| 258 | } | 270 | } |
| 259 | 271 | ||
| 260 | static inline void switch_to_bitmap(struct thread_struct *prev, | 272 | static inline void switch_to_bitmap(struct thread_struct *prev, |
