mirror-linux/include/uapi/asm-generic
Rick Edgecombe a5f6c2ace9 x86/shstk: Add user control-protection fault handler
A control-protection fault is triggered when a control-flow transfer
attempt violates Shadow Stack or Indirect Branch Tracking constraints.
For example, the return address for a RET instruction differs from the copy
on the shadow stack.

There already exists a control-protection fault handler for handling kernel
IBT faults. Refactor this fault handler into separate user and kernel
handlers, like the page fault handler. Add a control-protection handler
for usermode. To avoid ifdeffery, put them both in a new file cet.c, which
is compiled in the case of either of the two CET features supported in the
kernel: kernel IBT or user mode shadow stack. Move some static inline
functions from traps.c into a header so they can be used in cet.c.

Opportunistically fix a comment in the kernel IBT part of the fault
handler that is on the end of the line instead of preceding it.

Keep the same behavior for the kernel side of the fault handler, except for
converting a BUG to a WARN in the case of a #CP happening when the feature
is missing. This unifies the behavior with the new shadow stack code, and
also prevents the kernel from crashing under this situation which is
potentially recoverable.

The control-protection fault handler works in a similar way as the general
protection fault handler. It provides the si_code SEGV_CPERR to the signal
handler.

Co-developed-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
Tested-by: Pengfei Xu <pengfei.xu@intel.com>
Tested-by: John Allen <john.allen@amd.com>
Tested-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/all/20230613001108.3040476-28-rick.p.edgecombe%40intel.com
2023-08-02 15:01:50 -07:00
..
Kbuild kbuild: force all architectures except um to include mandatory-y 2019-03-17 12:56:32 +09:00
auxvec.h
bitsperlong.h asm-generic: Unify uapi bitsperlong.h for arm64, riscv and loongarch 2023-06-22 17:04:36 +02:00
bpf_perf_event.h
errno-base.h
errno.h
fcntl.h open: return EINVAL for O_DIRECTORY | O_CREAT 2023-03-22 11:06:55 +01:00
hugetlb_encode.h hugetlb_encode.h: fix undefined behaviour (34 << 26) 2022-10-03 14:02:55 -07:00
int-l64.h
int-ll64.h
ioctl.h
ioctls.h
ipcbuf.h arch: ipcbuf.h: make uapi asm/ipcbuf.h self-contained 2019-12-04 19:44:14 -08:00
kvm_para.h
mman-common.h mm/madvise: introduce MADV_COLLAPSE sync hugepage collapse 2022-09-11 20:25:46 -07:00
mman.h mm/mmap: move common defines to mman-common.h 2019-07-16 19:23:25 -07:00
msgbuf.h arch: msgbuf.h: make uapi asm/msgbuf.h self-contained 2019-12-04 19:44:14 -08:00
param.h
poll.h aio: fix use-after-free due to missing POLLFREE handling 2021-12-09 10:49:56 -08:00
posix_types.h y2038: hide timeval/timespec/itimerval/itimerspec types 2020-02-21 11:22:15 -08:00
resource.h
sembuf.h asm-generic/sembuf: Update architecture related information in comment 2020-10-26 16:48:22 +01:00
setup.h
shmbuf.h shmbuf.h: add asm/shmbuf.h to UAPI compile-test coverage 2022-02-17 09:09:37 +01:00
siginfo.h x86/shstk: Add user control-protection fault handler 2023-08-02 15:01:50 -07:00
signal-defs.h signal: Add SA_IMMUTABLE to ensure forced siganls do not get changed 2021-11-03 14:09:26 -05:00
signal.h signal.h: add linux/signal.h and asm/signal.h to UAPI compile-test coverage 2022-02-17 09:09:36 +01:00
socket.h net: core: add getsockopt SO_PEERPIDFD 2023-06-12 10:45:50 +01:00
sockios.h net: socket: implement 64-bit timestamps 2019-04-19 14:07:40 -07:00
stat.h
statfs.h
swab.h
termbits-common.h serial: Support for RS-485 multipoint addresses 2022-06-27 14:44:20 +02:00
termbits.h termbits.h: Remove posix_types.h include 2022-05-19 18:25:26 +02:00
termios.h
types.h uapi: Add missing _UAPI prefix to <asm-generic/types.h> include guard 2022-12-01 16:22:06 +01:00
ucontext.h
unistd.h asm-generic updates for 6.5 2023-07-06 10:06:04 -07:00