]> www.infradead.org Git - users/jedix/linux-maple.git/commit
pidfd: add PIDFD_SELF* sentinels to refer to own thread/process
authorLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Thu, 30 Jan 2025 20:40:26 +0000 (20:40 +0000)
committerChristian Brauner <brauner@kernel.org>
Wed, 5 Feb 2025 14:14:37 +0000 (15:14 +0100)
commitf08d0c3a71114bb36d1722506d926bd497182781
tree659f104de34da5cc19e0a6befc07a7042c75e1a8
parent2014c95afecee3e76ca4a56956a936e23283f05b
pidfd: add PIDFD_SELF* sentinels to refer to own thread/process

It is useful to be able to utilise the pidfd mechanism to reference the
current thread or process (from a userland point of view - thread group
leader from the kernel's point of view).

Therefore introduce PIDFD_SELF_THREAD to refer to the current thread, and
PIDFD_SELF_THREAD_GROUP to refer to the current thread group leader.

For convenience and to avoid confusion from userland's perspective we alias
these:

* PIDFD_SELF is an alias for PIDFD_SELF_THREAD - This is nearly always what
  the user will want to use, as they would find it surprising if for
  instance fd's were unshared()'d and they wanted to invoke pidfd_getfd()
  and that failed.

* PIDFD_SELF_PROCESS is an alias for PIDFD_SELF_THREAD_GROUP - Most users
  have no concept of thread groups or what a thread group leader is, and
  from userland's perspective and nomenclature this is what userland
  considers to be a process.

We adjust pidfd_get_task() and the pidfd_send_signal() system call with
specific handling for this, implementing this functionality for
process_madvise(), process_mrelease() (albeit, using it here wouldn't
really make sense) and pidfd_send_signal().

Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Link: https://lore.kernel.org/r/24315a16a3d01a548dd45c7515f7d51c767e954e.1738268370.git.lorenzo.stoakes@oracle.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
include/uapi/linux/pidfd.h
kernel/pid.c
kernel/signal.c