]> git.baikalelectronics.ru Git - kernel.git/commit
entry: Provide generic syscall exit function
authorThomas Gleixner <tglx@linutronix.de>
Wed, 22 Jul 2020 21:59:57 +0000 (23:59 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 24 Jul 2020 12:59:03 +0000 (14:59 +0200)
commita187cc9ddfb87949969648e2222ae45fdf4d8b58
treeb21efe2125aaf7d3ff9c336927be6e0abd26628e
parenta0b7de320b3e2cad205ac5553795213bb22754d9
entry: Provide generic syscall exit function

Like syscall entry all architectures have similar and pointlessly different
code to handle pending work before returning from a syscall to user space.

  1) One-time syscall exit work:
      - rseq syscall exit
      - audit
      - syscall tracing
      - tracehook (single stepping)

  2) Preparatory work
      - Exit to user mode loop (common TIF handling).
      - Architecture specific one time work arch_exit_to_user_mode_prepare()
      - Address limit and lockdep checks

  3) Final transition (lockdep, tracing, context tracking, RCU). Invokes
     arch_exit_to_user_mode() to handle e.g. speculation mitigations

Provide a generic version based on the x86 code which has all the RCU and
instrumentation protections right.

Provide a variant for interrupt return to user mode as well which shares
the above #2 and #3 work items.

After syscall_exit_to_user_mode() and irqentry_exit_to_user_mode() the
architecture code just has to return to user space. The code after
returning from these functions must not be instrumented.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lkml.kernel.org/r/20200722220519.613977173@linutronix.de
include/linux/entry-common.h
kernel/entry/common.c