linux/tools/testing/selftests
Linus Torvalds 5f85bd6aec vfs-6.14-rc1.pidfs
-----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQRAhzRXHqcMeLMyaSiRxhvAZXjcogUCZ4pRdwAKCRCRxhvAZXjc
 otQjAP9ooUH2d/jHZ49Rw4q/3BkhX8R2fFEZgj2PMvtYlr0jQwD/d8Ji0k4jINTL
 AIFRfPdRwrD+X35IUK3WPO42YFZ4rAg=
 =5wgo
 -----END PGP SIGNATURE-----

Merge tag 'vfs-6.14-rc1.pidfs' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs

Pull pidfs updates from Christian Brauner:

 - Rework inode number allocation

   Recently we received a patchset that aims to enable file handle
   encoding and decoding via name_to_handle_at(2) and
   open_by_handle_at(2).

   A crucical step in the patch series is how to go from inode number to
   struct pid without leaking information into unprivileged contexts.
   The issue is that in order to find a struct pid the pid number in the
   initial pid namespace must be encoded into the file handle via
   name_to_handle_at(2).

   This can be used by containers using a separate pid namespace to
   learn what the pid number of a given process in the initial pid
   namespace is. While this is a weak information leak it could be used
   in various exploits and in general is an ugly wart in the design.

   To solve this problem a new way is needed to lookup a struct pid
   based on the inode number allocated for that struct pid. The other
   part is to remove the custom inode number allocation on 32bit systems
   that is also an ugly wart that should go away.

   Allocate unique identifiers for struct pid by simply incrementing a
   64 bit counter and insert each struct pid into the rbtree so it can
   be looked up to decode file handles avoiding to leak actual pids
   across pid namespaces in file handles.

   On both 64 bit and 32 bit the same 64 bit identifier is used to
   lookup struct pid in the rbtree. On 64 bit the unique identifier for
   struct pid simply becomes the inode number. Comparing two pidfds
   continues to be as simple as comparing inode numbers.

   On 32 bit the 64 bit number assigned to struct pid is split into two
   32 bit numbers. The lower 32 bits are used as the inode number and
   the upper 32 bits are used as the inode generation number. Whenever a
   wraparound happens on 32 bit the 64 bit number will be incremented by
   2 so inode numbering starts at 2 again.

   When a wraparound happens on 32 bit multiple pidfds with the same
   inode number are likely to exist. This isn't a problem since before
   pidfs pidfds used the anonymous inode meaning all pidfds had the same
   inode number. On 32 bit sserspace can thus reconstruct the 64 bit
   identifier by retrieving both the inode number and the inode
   generation number to compare, or use file handles. This gives the
   same guarantees on both 32 bit and 64 bit.

 - Implement file handle support

   This is based on custom export operation methods which allows pidfs
   to implement permission checking and opening of pidfs file handles
   cleanly without hacking around in the core file handle code too much.

 - Support bind-mounts

   Allow bind-mounting pidfds. Similar to nsfs let's allow bind-mounts
   for pidfds. This allows pidfds to be safely recovered and checked for
   process recycling.

   Instead of checking d_ops for both nsfs and pidfs we could in a
   follow-up patch add a flag argument to struct dentry_operations that
   functions similar to file_operations->fop_flags.

* tag 'vfs-6.14-rc1.pidfs' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
  selftests: add pidfd bind-mount tests
  pidfs: allow bind-mounts
  pidfs: lookup pid through rbtree
  selftests/pidfd: add pidfs file handle selftests
  pidfs: check for valid ioctl commands
  pidfs: implement file handle support
  exportfs: add permission method
  fhandle: pull CAP_DAC_READ_SEARCH check into may_decode_fh()
  exportfs: add open method
  fhandle: simplify error handling
  pseudofs: add support for export_ops
  pidfs: support FS_IOC_GETVERSION
  pidfs: remove 32bit inode number handling
  pidfs: rework inode number allocation
2025-01-20 09:59:00 -08:00
..
acct selftest: acct: Add selftest for the acct() syscall 2024-08-01 13:55:34 -06:00
alsa selftests/alsa: Fix circular dependency involving global-timer 2024-12-20 10:00:41 +01:00
amd-pstate
arm64 kselftest/arm64: abi: fix SVCR detection 2024-12-13 14:59:37 +00:00
bpf selftests/bpf: Test bpf_skb_change_tail() in TC ingress 2024-12-20 23:13:31 +01:00
breakpoints selftests: breakpoints: use remaining time to check if suspend succeed 2024-10-02 14:37:30 -06:00
cachestat
capabilities
cgroup cgroup/cpuset: Prevent leakage of isolated CPUs into sched domains 2024-12-11 05:45:52 -10:00
clone3 clone3: clone3_cap_checkpoint_restore: remove unused MAX_PID_NS_LEVEL macro 2024-09-30 11:39:56 -06:00
connector
core selftests: core: add unshare_test to gitignore 2024-09-30 11:42:11 -06:00
coredump selftests: coredump: Add stackdump test 2025-01-04 10:12:18 +01:00
cpu-hotplug
cpufreq kselftest: cpufreq: Add RTC wakeup alarm 2024-07-31 11:42:36 -06:00
damon selftests/damon: add _damon_sysfs.py to TEST_FILES 2024-12-05 19:54:44 -08:00
devices kselftest/devices/probe: Fix SyntaxWarning in regex strings for Python3 2024-10-02 14:30:58 -06:00
dma
dmabuf-heaps
drivers selftests: net: Adapt ethtool mq tests to fix in qdisc graft 2025-01-15 09:28:51 +00:00
dt kselftest: dt: Ignore nodes that have ancestors disabled 2024-09-05 07:54:16 -05:00
efivarfs
exec selftests: exec: update gitignore for load_address 2024-09-30 11:42:19 -06:00
fchmodat2
filelock
filesystems Char/Misc/IIO/Whatever driver subsystem updates for 6.13-rc1 2024-11-29 11:58:27 -08:00
firmware
fpu
ftrace selftests/ftrace: adjust offset for kprobe syntax error test 2024-12-11 10:08:04 -07:00
futex
gpio
hid selftests/hid: fix kfunc inclusions with newer bpftool 2024-11-29 15:27:04 +01:00
ia64
intel_pstate selftests/intel_pstate: check if cpupower is installed 2024-10-28 21:18:57 -06:00
iommu iommufd/selftest: Cover IOMMU_FAULT_QUEUE_ALLOC in iommufd_fail_nth 2024-12-03 12:15:00 -04:00
ipc
ir
kcmp
kexec
kmod
kselftest selftests: support interpreted scripts with ksft_runner.sh 2024-09-09 17:38:02 -07:00
kvm KVM: s390: three small bugfixes 2025-01-12 12:51:05 +01:00
landlock selftests/landlock: Test signal created by out-of-bound message 2024-09-16 23:50:54 +02:00
lib selftests: lib: remove strscpy test 2024-08-01 13:55:33 -06:00
livepatch selftests: livepatch: test livepatching a kprobed function 2024-10-22 17:13:11 +02:00
lkdtm
locking
lsm lsm: add IPE lsm 2024-08-19 22:36:26 -04:00
media_tests
membarrier
memfd selftests/memfd: add test for mapping write-sealed memfd read-only 2024-12-30 17:59:06 -08:00
memory-hotplug
mincore
mm selftests/mm: set allocated memory to non-zero content in cow test 2025-01-12 19:03:37 -08:00
module selftests: find_symbol: Actually use load_mod() parameter 2024-11-28 11:17:38 -08:00
mount
mount_setattr selftests/mount_setattr: Fix failures on 64K PAGE_SIZE kernels 2024-11-20 09:18:48 +01:00
move_mount_set_group
mqueue
nci
net selftests: mptcp: avoid spurious errors on disconnect 2025-01-14 13:32:12 -08:00
nolibc selftests/nolibc: start qemu with 1 GiB of memory 2024-10-07 21:57:45 +02:00
nsfs
ntb
openat2
pcie_bwctrl selftests/pcie_bwctrl: Create selftests 2024-11-16 10:09:30 -06:00
perf_events
pid_namespace
pidfd selftests: add pidfd bind-mount tests 2024-12-22 11:03:13 +01:00
power_supply
powerpc selftests/powerpc: Remove the path after initialization. 2024-11-14 22:41:00 +11:00
prctl
proc
pstore
ptp selftest/ptp: update ptp selftest to exercise the gettimex options 2024-10-04 15:36:43 -07:00
ptrace
rcutorture Merge branches 'rcu/fixes', 'rcu/nocb', 'rcu/torture', 'rcu/stall' and 'rcu/srcu' into rcu/dev 2024-11-15 22:38:53 +01:00
resctrl selftests/resctrl: Replace magic constants used as array size 2024-11-04 17:02:03 -07:00
ring-buffer selftests/ring-buffer: Handle meta-page bigger than the system 2024-09-11 12:25:12 -04:00
riscv Merge patch series "selftest: fix riscv/vector tests" 2025-01-09 09:35:42 -08:00
rlimits
rseq selftests/rseq: Fix mm_cid test failure 2024-10-11 15:05:05 -06:00
rtc selftest: rtc: Add to check rtc alarm status for alarm related test 2024-10-23 14:13:00 -06:00
rust selftests: rust: config: disable GCC_PLUGINS 2024-08-11 17:32:55 -06:00
safesetid
sched
sched_ext sched_ext: Fix dsq_local_on selftest 2024-12-24 14:09:50 -10:00
seccomp
sgx
signal selftests: Add a test mangling with uc_sigmask 2024-10-29 01:01:49 -06:00
size
sparc64
splice
static_keys
sync
syscall_user_dispatch
sysctl
tc-testing selftests: tc-testing: reduce rshift value 2025-01-04 08:49:47 -08:00
tdx
thermal/intel
timens
timers selftests:timers: remove local CLOCKID defines 2024-10-14 16:15:13 -06:00
tmpfs
tpm2 selftests: tpm2: test_smoke: Run only when TPM2 is avaialable. 2024-09-17 18:56:37 +03:00
tty
turbostat
uevent
user_events
vDSO powerpc updates for 6.13 2024-11-23 10:44:31 -08:00
watchdog selftests/watchdog-test: Fix system accidentally reset after watchdog-test 2024-10-28 21:34:43 -06:00
wireguard Networking changes for 6.13. 2024-11-21 08:28:08 -08:00
x86 Documentation/srso: Document a method for checking safe RET operates properly 2024-08-27 09:16:35 +02:00
zram
.gitignore
gen_kselftest_tar.sh
kselftest_deps.sh
kselftest_harness.h selftests: harness: rename __constructor_order for clarification 2024-08-06 13:40:26 -06:00
kselftest_install.sh
kselftest_module.h
kselftest.h selftests: kselftest: Use strerror() on nolibc 2024-09-11 09:52:33 -06:00
lib.mk
Makefile pci-v6.13-changes 2024-11-26 18:05:44 -08:00
run_kselftest.sh