linux/kernel
Jiri Kosina cacd9385b7 x86/speculation: Apply IBPB more strictly to avoid cross-process data leak
commit dbfe2953f6 upstream

Currently, IBPB is only issued in cases when switching into a non-dumpable
process, the rationale being to protect such 'important and security
sensitive' processess (such as GPG) from data leaking into a different
userspace process via spectre v2.

This is however completely insufficient to provide proper userspace-to-userpace
spectrev2 protection, as any process can poison branch buffers before being
scheduled out, and the newly scheduled process immediately becomes spectrev2
victim.

In order to minimize the performance impact (for usecases that do require
spectrev2 protection), issue the barrier only in cases when switching between
processess where the victim can't be ptraced by the potential attacker (as in
such cases, the attacker doesn't have to bother with branch buffers at all).

[ tglx: Split up PTRACE_MODE_NOACCESS_CHK into PTRACE_MODE_SCHED and
  PTRACE_MODE_IBPB to be able to do ptrace() context tracking reasonably
  fine-grained ]

Fixes: 18bf3c3ea8 ("x86/speculation: Use Indirect Branch Prediction Barrier in context switch")
Originally-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc:  "WoodhouseDavid" <dwmw@amazon.co.uk>
Cc: Andi Kleen <ak@linux.intel.com>
Cc:  "SchauflerCasey" <casey.schaufler@intel.com>
Link: https://lkml.kernel.org/r/nycvar.YFH.7.76.1809251437340.15880@cbobk.fhfr.pm
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-12-05 19:32:00 +01:00
..
bpf bpf: fix bpf_prog_get_info_by_fd to return 0 func_lens for unpriv 2018-11-27 16:13:03 +01:00
cgroup cgroup: Fix dom_cgrp propagation when enabling threaded mode 2018-10-04 13:28:08 -07:00
configs
debug kdb: Use strscpy with destination buffer size 2018-12-01 09:37:33 +01:00
dma dma-mapping: fix panic caused by passing empty cma command line argument 2018-11-13 11:08:17 -08:00
events perf/ring_buffer: Prevent concurent ring buffer access 2018-10-02 09:37:59 +02:00
gcov
irq genirq: Fix race on spurious interrupt detection 2018-11-13 11:08:48 -08:00
livepatch Merge branch 'for-4.19/upstream' into for-linus 2018-08-20 18:33:50 +02:00
locking locking/lockdep: Fix debug_locks off performance problem 2018-11-13 11:08:20 -08:00
power Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2018-10-12 12:35:02 +02:00
printk printk: Fix panic caused by passing log_buf_len to command line 2018-11-13 11:08:48 -08:00
rcu rcu: Make need_resched() respond to urgent RCU-QS needs 2018-12-01 09:37:34 +01:00
sched sched/fair: Fix cpu_util_wake() for 'execl' type workloads 2018-12-01 09:37:32 +01:00
time clocksource: Revert "Remove kthread" 2018-09-06 23:38:35 +02:00
trace tracing/kprobes: Check the probe on unloaded module correctly 2018-11-21 09:19:09 +01:00
.gitignore
acct.c
async.c
audit_fsnotify.c
audit_tree.c
audit_watch.c
audit.c
audit.h
auditfilter.c
auditsc.c
backtracetest.c
bounds.c kbuild: fix kernel/bounds.c 'W=1' warning 2018-11-13 11:08:47 -08:00
capability.c
compat.c
configs.c
context_tracking.c
cpu_pm.c
cpu.c x86/speculation: Enable cross-hyperthread spectre v2 STIBP mitigation 2018-12-05 19:32:00 +01:00
crash_core.c kernel/crash_core.c: print timestamp using time64_t 2018-08-22 10:52:47 -07:00
crash_dump.c
cred.c
delayacct.c
dma.c
elfcore.c
exec_domain.c
exit.c
extable.c
fail_function.c
fork.c mm: respect arch_dup_mmap() return value 2018-09-04 16:45:02 -07:00
freezer.c
futex_compat.c
futex.c futex: Mark expected switch fall-throughs 2018-08-20 18:23:00 +02:00
groups.c
hung_task.c kernel/hung_task.c: allow to set checking interval separately from timeout 2018-08-22 10:52:47 -07:00
iomem.c
irq_work.c
jump_label.c jump_label: Fix typo in warning message 2018-09-10 10:15:48 +02:00
kallsyms.c
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kcov.c
kexec_core.c
kexec_file.c
kexec_internal.h
kexec.c
kmod.c
kprobes.c kprobes: Return error if we fail to reuse kprobe instead of BUG_ON() 2018-11-13 11:08:28 -08:00
ksysfs.c
kthread.c
latencytop.c
Makefile
memremap.c libnvdimm-for-4.19_dax-memory-failure 2018-08-25 18:43:59 -07:00
module_signing.c
module-internal.h
module.c module: use relative references for __ksymtab entries 2018-08-22 10:52:47 -07:00
notifier.c
nsproxy.c
padata.c
panic.c
params.c
pid_namespace.c
pid.c fork: report pid exhaustion correctly 2018-09-20 22:01:11 +02:00
profile.c
ptrace.c x86/speculation: Apply IBPB more strictly to avoid cross-process data leak 2018-12-05 19:32:00 +01:00
range.c
reboot.c
relay.c
resource.c
rseq.c
seccomp.c
signal.c signal: Guard against negative signal numbers in copy_siginfo_from_user32 2018-11-13 11:08:45 -08:00
smp.c
smpboot.c
smpboot.h
softirq.c
stacktrace.c
stop_machine.c
sys_ni.c
sys.c kernel/sys.c: remove duplicated include 2018-09-20 22:01:11 +02:00
sysctl_binary.c
sysctl.c namei: allow restricted O_CREAT of FIFOs and regular files 2018-08-23 18:48:43 -07:00
task_work.c
taskstats.c
test_kprobes.c
torture.c
tracepoint.c tracepoint: Fix tracepoint array element size mismatch 2018-10-17 15:35:29 -04:00
tsacct.c
ucount.c
uid16.c
uid16.h
umh.c
up.c
user_namespace.c userns: also map extents in the reverse map to kernel IDs 2018-11-13 11:09:00 -08:00
user-return-notifier.c
user.c userns: use irqsave variant of refcount_dec_and_lock() 2018-08-22 10:52:47 -07:00
utsname_sysctl.c
utsname.c
watchdog_hld.c watchdog: Mark watchdog touch functions as notrace 2018-08-30 12:56:40 +02:00
watchdog.c watchdog: Mark watchdog touch functions as notrace 2018-08-30 12:56:40 +02:00
workqueue_internal.h
workqueue.c watchdog: Mark watchdog touch functions as notrace 2018-08-30 12:56:40 +02:00