Re: [PATCH v2 00/10] net: support thread-specific pidfds for send and connect

From: Alexander Mikhalitsyn

Date: Wed Sep 09 2026 - 07:20:50 EST


Am Mi., 9. Sept. 2026 um 12:43 Uhr schrieb Christian Brauner
<brauner@xxxxxxxxxx>:
>
> SO_PASSPIDFD/SCM_PIDFD and SO_PEERPIDFD allow to retrieve a pidfd for
> the thread-group leader. The coredump server using the coredump socket
> cannot get a handle on the task that took the signal and is writing the
> coredump easily. Workloads interested in per-thread authentification
> have similar problems.
>
> Add SO_PASSPIDFD_THREAD and SO_PEERPIDFD_THREAD. We record the sending
> and the connecting thread in addition to the thread-group leader.
>
> SO_PASSPIDFD_THREAD functions like SO_PASSPIDFD but instead of an
> SCM_PIDFD message for the thread-group leader, SCM_PIDFD sends a pidfd
> for the specific thread. SO_PASSPIDFD_THREAD is mutually exclusive with
> SO_PASSPIDFD. The last one set takes precedence and disables the other
> one. Both SO_PASSCRED and SO_PASSPIDFD receivers see one writer per
> process as before.
>
> SO_PEERPIDFD_THREAD allows to retrieve a pidfd for the specific thread
> that called connect(), listen(), or socketpair().
>
> pidfs_coredump() now also stamps the dumping thread's struct pid so a
> pidfd for that thread reports the coredump like the pidfd of the
> thread-group leader does.
>
> Signed-off-by: Christian Brauner (Amutable) <brauner@xxxxxxxxxx>

Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@xxxxxxxxxxxxxx>

> ---
> Changes in v2:
> - Fix a few documentation issues.
> - Link to v1: https://patch.msgid.link/20260831-work-unix-passpidfd-v1-0-70cbfda0c7ba@xxxxxxxxxx
>
> ---
> Christian Brauner (10):
> pid: add helpers to operate on a struct pid array
> af_unix: record the pid of the sending thread
> net: add SO_PASSPIDFD_THREAD to get a thread-specific SCM_PIDFD
> selftests/net: SO_PASSPIDFD_THREAD
> net: turn sk_peer_pid into an array indexed by pid type
> af_unix: record the pid of the connecting thread
> net: add SO_PEERPIDFD_THREAD to get a thread-specific pidfd
> selftests/net: SO_PEERPIDFD_THREAD
> pidfs: record the coredump on the dumping thread's pid too
> selftests/coredump: check the dumping thread's pidfd
>
> arch/alpha/include/uapi/asm/socket.h | 4 +
> arch/mips/include/uapi/asm/socket.h | 4 +
> arch/parisc/include/uapi/asm/socket.h | 4 +
> arch/sparc/include/uapi/asm/socket.h | 4 +
> fs/coredump.c | 22 +-
> fs/pidfs.c | 27 +-
> include/linux/coredump.h | 4 +-
> include/linux/pid.h | 53 +++
> include/linux/pid_types.h | 8 +
> include/linux/pidfs.h | 5 +
> include/linux/sched/signal.h | 18 +
> include/net/scm.h | 7 +-
> include/net/sock.h | 14 +-
> include/trace/events/landlock.h | 2 +-
> include/uapi/asm-generic/socket.h | 4 +
> net/bluetooth/af_bluetooth.c | 6 +-
> net/bluetooth/hci_sock.c | 8 +-
> net/bluetooth/l2cap_sock.c | 2 +-
> net/core/scm.c | 36 +-
> net/core/sock.c | 120 ++++---
> net/unix/af_unix.c | 67 ++--
> net/unix/af_unix.h | 3 +-
> tools/lib/python/kdoc/xforms_lists.py | 1 +
> .../selftests/coredump/coredump_socket_test.c | 175 ++++++++++
> tools/testing/selftests/coredump/coredump_test.h | 2 +
> .../selftests/coredump/coredump_test_helpers.c | 49 +++
> tools/testing/selftests/net/af_unix/Makefile | 2 +
> tools/testing/selftests/net/af_unix/scm_pidfd.c | 366 +++++++++++++++++++++
> 28 files changed, 907 insertions(+), 110 deletions(-)
> ---
> base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
> change-id: 20260825-work-unix-passpidfd-086a1ec09e8a
>