[PATCH bpf-next 0/3] bpf: Add bpf_path_getattr()
From: Anastasios Papagiannis
Date: Thu Oct 29 2026 - 06:09:35 EST
Userspace code can populate BPF maps using file identities obtained from
statx(). BPF LSM programs need a way to generate those inode and device
numbers to look up for those entries. Reading inode fields directly can
give different values on overlayfs and misses filesystem-specific getattr
behavior.
bpf_real_data_inode() resolves the inode hosting a file's data, whose
identity and metadata can differ from those reported by statx() on
overlayfs. It does not invoke the filesystem's getattr operation or
provide mount information.
This series adds bpf_path_getattr() for sleepable LSM programs. It takes a
trusted path and calls vfs_getattr_nosec() to avoiding calling back into
security_inode_getattr().
The kfunc returns a 64-byte bpf_file_stat. We avoid using struct kstat
directly as this is an internal structure and this can lead to changing
the user API. Inode and device identity follow the filesystem's getattr
operation, and the device number uses stat(2) encoding. Mount IDs,
mount-root attributes and ownership translation follow statx(), including
mount idmapping and translation into the current task's user namespace.
Selftests compare the result with statx() on tmpfs and on overlayfs before
and after copy-up, and exercise verifier restrictions. The series also
updates the relevant documentation.
Anastasios Papagiannis (3):
bpf: Add bpf_path_getattr()
docs/bpf: Document bpf_path_getattr()
selftests/bpf: Test bpf_path_getattr()
Documentation/bpf/fs_kfuncs.rst | 13 ++
fs/bpf_fs_kfuncs.c | 108 +++++++++-
.../selftests/bpf/prog_tests/path_getattr.c | 185 ++++++++++++++++++
.../selftests/bpf/progs/path_getattr.c | 25 +++
.../bpf/progs/verifier_path_getattr.c | 57 ++++++
5 files changed, 387 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/path_getattr.c
create mode 100644 tools/testing/selftests/bpf/progs/path_getattr.c
create mode 100644 tools/testing/selftests/bpf/progs/verifier_path_getattr.c
base-commit: d80373a8e70d3193151232c3062abbbe367ff5ad
--
2.56.0