Skip to content

Commit fe71988

Browse files
akmistrytorvalds
authored andcommitted
proc: provide details on indirect branch speculation
Similar to speculation store bypass, show information about the indirect branch speculation mode of a task in /proc/$pid/status. For testing/benchmarking, I needed to see whether IB (Indirect Branch) speculation (see Spectre-v2) is enabled on a task, to see whether an IBPB instruction should be executed on an address space switch. Unfortunately, this information isn't available anywhere else and currently the only way to get it is to hack the kernel to expose it (like this change). It also helped expose a bug with conditional IB speculation on certain CPUs. Another place this could be useful is to audit the system when using sanboxing. With this change, I can confirm that seccomp-enabled process have IB speculation force disabled as expected when the kernel command line parameter `spectre_v2_user=seccomp`. Since there's already a 'Speculation_Store_Bypass' field, I used that as precedent for adding this one. [[email protected]: remove underscores from field name to workaround documentation issue] Link: https://lkml.kernel.org/r/20201106131015.v2.1.I7782b0cedb705384a634cfd8898eb7523562da99@changeid Link: https://lkml.kernel.org/r/20201030172731.1.I7782b0cedb705384a634cfd8898eb7523562da99@changeid Signed-off-by: Anand K Mistry <[email protected]> Cc: Anthony Steinhauser <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Anand K Mistry <[email protected]> Cc: Alexey Dobriyan <[email protected]> Cc: Alexey Gladkov <[email protected]> Cc: Jonathan Corbet <[email protected]> Cc: Kees Cook <[email protected]> Cc: Mauro Carvalho Chehab <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Mike Rapoport <[email protected]> Cc: NeilBrown <[email protected]> Cc: Peter Zijlstra <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent d2928e8 commit fe71988

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

Documentation/filesystems/proc.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ read the file /proc/PID/status::
210210
NoNewPrivs: 0
211211
Seccomp: 0
212212
Speculation_Store_Bypass: thread vulnerable
213+
SpeculationIndirectBranch: conditional enabled
213214
voluntary_ctxt_switches: 0
214215
nonvoluntary_ctxt_switches: 1
215216

@@ -292,6 +293,7 @@ It's slow but very precise.
292293
NoNewPrivs no_new_privs, like prctl(PR_GET_NO_NEW_PRIV, ...)
293294
Seccomp seccomp mode, like prctl(PR_GET_SECCOMP, ...)
294295
Speculation_Store_Bypass speculative store bypass mitigation status
296+
SpeculationIndirectBranch indirect branch speculation mode
295297
Cpus_allowed mask of CPUs on which this process may run
296298
Cpus_allowed_list Same as previous, but in "list format"
297299
Mems_allowed mask of memory nodes allowed to this process

fs/proc/array.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,34 @@ static inline void task_seccomp(struct seq_file *m, struct task_struct *p)
369369
seq_puts(m, "vulnerable");
370370
break;
371371
}
372+
373+
seq_puts(m, "\nSpeculationIndirectBranch:\t");
374+
switch (arch_prctl_spec_ctrl_get(p, PR_SPEC_INDIRECT_BRANCH)) {
375+
case -EINVAL:
376+
seq_puts(m, "unsupported");
377+
break;
378+
case PR_SPEC_NOT_AFFECTED:
379+
seq_puts(m, "not affected");
380+
break;
381+
case PR_SPEC_PRCTL | PR_SPEC_FORCE_DISABLE:
382+
seq_puts(m, "conditional force disabled");
383+
break;
384+
case PR_SPEC_PRCTL | PR_SPEC_DISABLE:
385+
seq_puts(m, "conditional disabled");
386+
break;
387+
case PR_SPEC_PRCTL | PR_SPEC_ENABLE:
388+
seq_puts(m, "conditional enabled");
389+
break;
390+
case PR_SPEC_ENABLE:
391+
seq_puts(m, "always enabled");
392+
break;
393+
case PR_SPEC_DISABLE:
394+
seq_puts(m, "always disabled");
395+
break;
396+
default:
397+
seq_puts(m, "unknown");
398+
break;
399+
}
372400
seq_putc(m, '\n');
373401
}
374402

0 commit comments

Comments
 (0)