uapi: export PROCFS_ROOT_INO
authorAleksa Sarai <cyphar@cyphar.com>
Tue, 8 Jul 2025 13:21:51 +0000 (23:21 +1000)
committerChristian Brauner <brauner@kernel.org>
Thu, 10 Jul 2025 07:39:18 +0000 (09:39 +0200)
commit76fdb7eb4e1c91086ce9c3db6972c2ed48c96afb
treeb8db83fb32e4008f3dfb2c2b7fc04c5631ae82f8
parentcd267cdef5fe98006a6b989c5cda035032bb839f
uapi: export PROCFS_ROOT_INO

The root inode of /proc having a fixed inode number has been part of the
core kernel ABI since its inception, and recently some userspace
programs (mainly container runtimes) have started to explicitly depend
on this behaviour.

The main reason this is useful to userspace is that by checking that a
suspect /proc handle has fstype PROC_SUPER_MAGIC and is PROCFS_ROOT_INO,
they can then use openat2(RESOLVE_{NO_{XDEV,MAGICLINK},BENEATH}) to
ensure that there isn't a bind-mount that replaces some procfs file with
a different one. This kind of attack has lead to security issues in
container runtimes in the past (such as CVE-2019-19921) and libraries
like libpathrs[1] use this feature of procfs to provide safe procfs
handling functions.

There was also some trailing whitespace in the "struct proc_dir_entry"
initialiser, so fix that up as well.

[1]: https://github.com/openSUSE/libpathrs

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
Link: https://lore.kernel.org/20250708-uapi-procfs-root-ino-v1-1-6ae61e97c79b@cyphar.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/proc/root.c
include/linux/proc_ns.h
include/uapi/linux/fs.h