[PATCH v3 1/2] bpf: add bpf_init_inode_xattr kfunc for atomic inode labeling
Paul Moore
paul at paul-moore.com
Thu Jun 25 20:47:51 UTC 2026
On Thu, Jun 25, 2026 at 4:44 PM Alexei Starovoitov
<alexei.starovoitov at gmail.com> wrote:
> On Thu, Jun 25, 2026 at 1:40 PM Paul Moore <paul at paul-moore.com> wrote:
> > On Thu, Jun 25, 2026 at 3:58 PM Alexei Starovoitov
> > <alexei.starovoitov at gmail.com> wrote:
> > > On Thu, Jun 25, 2026 at 7:23 AM Christian Brauner <brauner at kernel.org> wrote:
> > > > On 2026-06-23 20:12:32-04:00, Paul Moore wrote:
> > > > > On Jun 18, 2026 David Windsor <dwindsor at gmail.com> wrote:
> > > > >
> > > > > > Add bpf_init_inode_xattr() kfunc for BPF LSM programs to atomically set
> > > > > > xattrs via the inode_init_security hook using lsm_get_xattr_slot().
> > > > > >
> > > > > > The inode_init_security hook previously took the xattr array and count
> > > > > > as two separate output parameters (struct xattr *xattrs, int
> > > > > > *xattr_count), which BPF programs cannot write to. Pass the xattr state
> > > > > > as a single context object (struct xattr_ctx) instead, and have
> > > > > > bpf_init_inode_xattr() take that context directly. Update the existing
> > > > > > in-tree callers of inode_init_security to take and forward the new
> > > > > > xattr_ctx.
> > > > > >
> > > > > > A previous attempt [1] required a kmalloc string output protocol for
> > > > > > the xattr name. Since commit 6bcdfd2cac55 ("security: Allow all LSMs to
> > > > > > provide xattrs for inode_init_security hook") [2], the xattr name is no
> > > > > > longer allocated; it is a static constant.
> > > > > >
> > > > > > Because we rely on the hook-specific ctx layout, the kfunc is
> > > > > > restricted to lsm/inode_init_security. Restrict the xattr names that
> > > > > > may be set via this kfunc to the bpf.* namespace.
> > > > > >
> > > > > > Link: https://kernsec.org/pipermail/linux-security-module-archive/2022-October/034878.html [1]
> > > > > > Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6bcdfd2cac55 [2]
> > > > > > Suggested-by: Song Liu <song at kernel.org>
> > > > > > Signed-off-by: David Windsor <dwindsor at gmail.com>
> > > > > > ---
> > > > > > fs/bpf_fs_kfuncs.c | 106 +++++++++++++++++++++++++++++-
> > > > > > include/linux/bpf.h | 1 +
> > > > > > include/linux/bpf_lsm.h | 3 +
> > > > > > include/linux/evm.h | 9 +--
> > > > > > include/linux/lsm_hook_defs.h | 4 +-
> > > > > > include/linux/lsm_hooks.h | 16 ++---
> > > > > > include/linux/security.h | 5 ++
> > > > > > kernel/bpf/bpf_lsm.c | 10 +++
> > > > > > kernel/bpf/trampoline.c | 3 +
> > > > > > security/bpf/hooks.c | 1 +
> > > > > > security/integrity/evm/evm_main.c | 8 ++-
> > > > > > security/security.c | 7 +-
> > > > > > security/selinux/hooks.c | 4 +-
> > > > > > security/smack/smack_lsm.c | 27 ++++----
> > > > > > 14 files changed, 166 insertions(+), 38 deletions(-)
> > > > >
> > > > > I have a few specific comments below, inline with the patch, but I wanted
> > > > > to make some general comments too.
> > > > >
> > > > > The kfunc additions really don't belong in the VFS kfunc file, please
> > > > > create a LSM kfunc file (call it security/bpf_lsm_kfuncs.c) and add the
> > > > > kfunc code to this new file.
> > > >
> > > > We expose a bunch of VFS heavy operations for various security modules
> > > > and this is really not different. For xattrs we have it all centralized
> > > > in the VFS and in general all VFS related bpf kfuncs should continue
> > > > living there and be registered there. Anything that's just bpf infra
> > > > specific can go to security/bpf/kfuncs.c instead. But anyway, it's a bpf
> > > > specific helper so it's the bpf maintainer's call.
> > >
> > > Completely agree. This is vfs related kfunc and has to be
> > > in fs/bpf_fs_kfuncs.c to make sure vfs maintainers review it now
> > > and all future changes to it.
> >
> > *laughs*
> >
> > Okay, then split out the LSM specific stuff into
> > security/bpf_lsm_kfuncs.c; all the LSM macros/defines/calls should be
> > in the LSM kfuncs file.
>
> Paul,
>
> I'm sorry, but you didn't demonstrate the level of understanding
> of bpf to be trusted to maintain any piece of it.
Alexei,
You haven't demonstrated the understanding or decorum necessary to be
entrusted with any part of the LSM framework.
--
paul-moore.com
More information about the Linux-security-module-archive
mailing list