[PATCH v2 00/10] Migrate syscall entry/exit work to SYSCALL_WORK flagset

Gabriel Krisman Bertazi
2020-11-16T17:43:28Z

Hi,

This is the v2 of the SYSCALL_WORK flagset. It addresses the issues
raised by hch and tglx in the previous iteration (thank you!) regarding
casts, styling, and naming of the variable fields. It also fixes
comments that were missing on the previous version.

This was tested by running the modified syscall features on a x86 box.
I just compile tested for architectures that are !CONFIG_GENERIC_ENTRY.

This patchset can be found at the following repo/tag

https://gitlab.collabora.com/krisman/linux.git -b x86-tif-cleanup-v2

Below, is the original cover letter, with reasoning and design.

Original cover letter
====================

Thomas,

This a refactor work moving the work done by features like seccomp,
ptrace, audit and tracepoints out of the TI flags. The reasons are:

1) Scarcity of TI flags in x86 32-bit.

2) TI flags are defined by the architecture, while these features are
arch-independent.

3) Community resistance in merging new architecture-independent
features as TI flags.

The design exposes a new field in struct thread_info that is read at
syscall_trace_enter and syscall_work_exit in place of the ti flags.
No functional changes is expected from this patchset. The design and
organization of this patchset achieves the following goals:

1) SYSCALL_WORK flags are architecture-independent

2) Architectures that are not using the generic entry code can
continue to use TI flags transparently and be converted later.

3) Architectures that migrate to the generic entry code are forced to
use the new design.

4) x86, since it supports the generic code, is migrated in this
patchset.

The transparent usage of TIF or SYSCALL_WORK flags is achieved through
some macros. Any code outside of the generic entry code is converted to
use the flags only through the accessors.

The patchset has some transition helpers, in an attempt to simplify the
patches converting each of the subsystems separately. I believe this
simplifies the review while making the tree bisectable.

I tested this by running each of the features in x86. Other
architectures were compile tested only.

This is based on top of tip/master.

A tree with the patches applies can be pulled from

https://gitlab.collabora.com/krisman/linux.git -b x86/tif-cleanup-v1

Please, if possible, consider queueing this for the 5.11 merge window,
as this is blocking the Syscall User Dispatch work that has been on the
list for a while.

Gabriel Krisman Bertazi (10):
x86: Expose syscall_work field in thread_info
entry: Expose helpers to migrate TIF to SYSCALL_WORK flags
entry: Wire up syscall_work in common entry code
seccomp: Migrate to use SYSCALL_WORK flag
tracepoints: Migrate to use SYSCALL_WORK flag
ptrace: Migrate to use SYSCALL_TRACE flag
ptrace: Migrate TIF_SYSCALL_EMU to use SYSCALL_WORK flag
audit: Migrate to use SYSCALL_WORK flag
entry: Drop usage of TIF flags in the generic syscall code
x86: Reclaim unused x86 TI flags

arch/x86/include/asm/thread_info.h | 11 +-------
include/asm-generic/syscall.h | 24 ++++++++++------
include/linux/entry-common.h | 44 ++++++++++-------------------
include/linux/seccomp.h | 2 +-
include/linux/thread_info.h | 44 +++++++++++++++++++++++++++++
include/linux/tracehook.h | 17 +++++------
include/trace/syscall.h | 6 ++--
kernel/auditsc.c | 4 +--
kernel/entry/common.c | 45 +++++++++++++++---------------
kernel/fork.c | 8 +++---
kernel/ptrace.c | 16 +++++------
kernel/seccomp.c | 6 ++--
kernel/trace/trace_events.c | 8 +++---
kernel/tracepoint.c | 4 +--
14 files changed, 134 insertions(+), 105 deletions(-)

--
2.29.2