linux/arch/riscv/include/asm
Tycho Andersen af33d2433b
riscv: fix seccomp reject syscall code path
If secure_computing() rejected a system call, we were previously setting
the system call number to -1, to indicate to later code that the syscall
failed. However, if something (e.g. a user notification) was sleeping, and
received a signal, we may set a0 to -ERESTARTSYS and re-try the system call
again.

In this case, seccomp "denies" the syscall (because of the signal), and we
would set a7 to -1, thus losing the value of the system call we want to
restart.

Instead, let's return -1 from do_syscall_trace_enter() to indicate that the
syscall was rejected, so we don't clobber the value in case of -ERESTARTSYS
or whatever.

This commit fixes the user_notification_signal seccomp selftest on riscv to
no longer hang. That test expects the system call to be re-issued after the
signal, and it wasn't due to the above bug. Now that it is, everything
works normally.

Note that in the ptrace (tracer) case, the tracer can set the register
values to whatever they want, so we still need to keep the code that
handles out-of-bounds syscalls. However, we can drop the comment.

We can also drop syscall_set_nr(), since it is no longer used anywhere, and
the code that re-loads the value in a7 because of it.

Reported in: https://lore.kernel.org/bpf/CAEn-LTp=ss0Dfv6J00=rCAy+N78U2AmhqJNjfqjr2FDpPYjxEQ@mail.gmail.com/

Reported-by: David Abdurachmanov <david.abdurachmanov@gmail.com>
Signed-off-by: Tycho Andersen <tycho@tycho.ws>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
2020-03-05 13:58:15 -08:00
..
asm-offsets.h
asm-prototypes.h riscv: Less inefficient gcc tishift helpers (and export their symbols) 2020-01-18 19:13:41 -08:00
asm.h RISC-V: Clear load reservations while restoring hart contexts 2019-10-01 13:16:40 -07:00
atomic.h locking/atomic, riscv: Use s64 for atomic64 2019-06-03 12:32:56 +02:00
barrier.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
bitops.h RISC-V patches for v5.2-rc6 2019-06-17 10:34:03 -07:00
bug.h riscv: cleanup <asm/bug.h> 2019-10-23 14:53:46 -07:00
cache.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
cacheflush.h riscv: fix build break after macro-to-function conversion in generic cacheflush.h 2019-07-18 08:16:56 -07:00
clint.h riscv: provide native clint access for M-mode 2019-11-17 15:17:39 -08:00
cmpxchg.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
csr.h riscv: set pmp configuration if kernel is running in M-mode 2020-02-18 09:41:24 -08:00
current.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
delay.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
elf.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
fence.h riscv/spinlock: Strengthen implementations with fences 2018-04-02 19:59:43 -07:00
fixmap.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
ftrace.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
futex.h Merge branch 'next/nommu' into for-next 2019-11-22 18:59:09 -08:00
hugetlb.h riscv: Introduce huge page support for 32/64bit kernel 2019-07-03 15:23:38 -07:00
hwcap.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
image.h RISC-V: Typo fixes in image header and documentation. 2019-12-19 09:32:45 -07:00
io.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
irq.h riscv: add missing header file includes 2019-10-28 00:46:01 -07:00
irqflags.h riscv: abstract out CSR names for supervisor vs machine mode 2019-11-05 09:20:42 -08:00
kasan.h riscv: Add KASAN support 2020-01-22 13:09:58 -08:00
Kbuild asm-generic: Make dma-contiguous.h a mandatory include/asm header 2020-02-04 11:38:59 +01:00
kprobes.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
linkage.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
mmio.h generic ioremap support 2019-11-28 10:57:12 -08:00
mmiowb.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
mmu_context.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
mmu.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
module.h RISC-V: Support MODULE_SECTIONS mechanism on RV32 2019-01-07 08:19:20 -08:00
page.h riscv: mm: add support for CONFIG_DEBUG_VIRTUAL 2020-01-23 10:40:06 -08:00
pci.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
perf_event.h riscv, perf: Add arch specific perf_arch_bpf_user_pt_regs 2019-12-19 16:03:31 +01:00
pgalloc.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
pgtable-32.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
pgtable-64.h riscv: mm: add p?d_leaf() definitions 2020-02-04 03:05:24 +00:00
pgtable-bits.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
pgtable.h riscv: mm: add p?d_leaf() definitions 2020-02-04 03:05:24 +00:00
processor.h riscv: abstract out CSR names for supervisor vs machine mode 2019-11-05 09:20:42 -08:00
ptrace.h riscv: abstract out CSR names for supervisor vs machine mode 2019-11-05 09:20:42 -08:00
sbi.h riscv: provide native clint access for M-mode 2019-11-17 15:17:39 -08:00
seccomp.h riscv: add support for SECCOMP and SECCOMP_FILTER 2019-10-29 11:32:10 -07:00
smp.h riscv: cleanup riscv_cpuid_to_hartid_mask 2019-09-05 01:51:57 -07:00
sparsemem.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
spinlock_types.h riscv: clean up the macro format in each header file 2019-11-12 12:04:52 -08:00
spinlock.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
string.h riscv: Add KASAN support 2020-01-22 13:09:58 -08:00
switch_to.h riscv: abstract out CSR names for supervisor vs machine mode 2019-11-05 09:20:42 -08:00
syscall.h riscv: fix seccomp reject syscall code path 2020-03-05 13:58:15 -08:00
thread_info.h riscv: add support for SECCOMP and SECCOMP_FILTER 2019-10-29 11:32:10 -07:00
timex.h riscv: add support for MMIO access to the timer registers 2019-11-13 14:10:40 -08:00
tlb.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
tlbflush.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
uaccess.h riscv: add nommu support 2019-11-17 15:17:39 -08:00
unistd.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00
vdso.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
vmalloc.h mm/vmalloc: Add empty <asm/vmalloc.h> headers and use them from <linux/vmalloc.h> 2019-12-10 10:12:55 +01:00
word-at-a-time.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286 2019-06-05 17:36:37 +02:00