All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Mickaël Salaün" <mic@digikod.net>
To: Cai Xinchen <caixinchen1@huawei.com>
Cc: "Günther Noack" <gnoack3000@gmail.com>,
	gnoack@google.com, paul@paul-moore.com, jmorris@namei.org,
	serge@hallyn.com, corbet@lwn.net, skhan@linuxfoundation.org,
	rdunlap@infradead.org, gregkh@linuxfoundation.org,
	rafael@kernel.org, dakr@kernel.org, dlemoal@kernel.org,
	hch@lst.de, axboe@kernel.dk, viro@zeniv.linux.org.uk,
	brauner@kernel.org, jack@suse.cz, dhowells@redhat.com,
	code@tyhicks.com, linkinjeon@kernel.org, sj1557.seo@samsung.com,
	yuezhang.mo@sony.com, hirofumi@mail.parknet.co.jp,
	cel@kernel.org, jlayton@kernel.org, neil@brown.name,
	okorniev@redhat.com, Dai.Ngo@oracle.com, tom@talpey.com,
	miklos@szeredi.hu, amir73il@gmail.com, senozhatsky@chromium.org,
	chenxiaosong@chenxiaosong.com, zohar@linux.ibm.com,
	roberto.sassu@huawei.com, dmitry.kasatkin@gmail.com,
	eric.snowberg@oracle.com, stephen.smalley.work@gmail.com,
	omosnacek@gmail.com, casey@schaufler-ca.com, nanx95726@gmail.com,
	djwong@kernel.org, daniel@iogearbox.net,
	linux-security-module@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, driver-core@lists.linux.dev,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	netfs@lists.linux.dev, ecryptfs@vger.kernel.org,
	exfat@lists.linux.dev, linux-nfs@vger.kernel.org,
	linux-unionfs@vger.kernel.org, linux-cifs@vger.kernel.org,
	linux-integrity@vger.kernel.org, selinux@vger.kernel.org,
	linux-kselftest@vger.kernel.org, xiujianfeng@huawei.com,
	lujialin4@huawei.com, bpf@vger.kernel.org, kpsingh@kernel.org,
	matt@bobrowski.net, alexei.starovoitov@gmail.com
Subject: Re: [PATCH RFC -next 00/12] landlock: Add READ_METADATA and WRITE_METADATA access rights
Date: Mon, 28 Sep 2026 21:46:59 +0200	[thread overview]
Message-ID: <20260928.phei6Ohmeiba@digikod.net> (raw)
In-Reply-To: <a6a40c38-0e1c-4a3f-a705-e4a38c575c25@huawei.com>

Thank for this patch series!

I'll send more reviews tomorrow, but in the meantime here are some
answers:

On Mon, Sep 28, 2026 at 02:52:02PM +0800, Cai Xinchen wrote:
> Thank you for review!
> 
> I will link the feature request
> (https://github.com/landlock-lsm/linux/issues/11) in the v2 cover letter.
> 
> For https://github.com/landlock-lsm/linux/issues/18, the current
> READ_METADATA cannot solve this problem, and I don't have a good idea for
> now.
> 
> For path_* rename, I'd rather keep the inode_* names:
> 
> * There is precedent for the mismatch: the inode_getattr hook
>   upstream already takes a "const struct path *" (this series just
>   aligns the other metadata hooks with it).
> 
> * The path_* prefix has an established meaning in the LSM hook
>   interface: it denotes the pathname-based (TOMOYO/AppArmor-style)
>   hooks that are invoked at the VFS path level *before* the
>   corresponding inode_* hook, as a paired, duplicate check
>   serving a different class of LSMs.  For example, a chmod(2)
>   currently runs security_path_chmod() (fs/open.c, for TOMOYO and
>   AppArmor) and then, via notify_change(),
>   security_inode_setattr() (for SELinux, Smack and now Landlock);
>   vfs_mknod() similarly calls both security_path_mknod() and
>   security_inode_mknod().  Renaming inode_setattr to
>   path_setattr would put two path_-prefixed hooks with different
>   call contracts into the same syscall, and path_chown(path,
>   uid, gid) next to a path_setattr(path, attr) would read as a
>   redundant pair, even though they belong to different hook
>   families.  Landlock itself already uses the path_* family for
>   its real path-level hooks (e.g. path_truncate for the TRUNCATE
>   right), so mixing renamed inode hooks into that prefix would
>   also blur its own hook table.

I had the same though as Günther on this, but I'll leave that up to
Paul.

Regarding the BPF LSM use case, I don't think it would make a big
difference.  Anyway, some BPF selftests need to be updated at the same
time, which will also make the changes clear to the BPF folks.

> 
> * If the consensus is that these hooks should be renamed, I think
>   that should be a standalone, tree-wide rename series (including
>   inode_getattr), so that BPF programs only break once instead of
>   twice.

As a general rule, please create bisectable patches (e.g. any patch must
pass BPF and Landlock selftests; all dependent kernel code must build).
But new tests still deserve their own patches.

> 
> On 9/26/2026 4:27 PM, Günther Noack wrote:
> > On Thu, Sep 24, 2026 at 06:48:19PM +0800, Cai Xinchen wrote:
> > > This series adds two new Landlock filesystem access rights,
> > > LANDLOCK_ACCESS_FS_READ_METADATA and LANDLOCK_ACCESS_FS_WRITE_METADATA,
> > > which control access to file and directory metadata such as inode
> > > attributes (mode, ownership, timestamps), extended attributes and POSIX
> > > ACLs.  It picks up the work from the "landlock: add chmod and chown
> > > support" series [1] and follows the coarse-grained grouping discussed in
> > > that thread [2]: instead of separate chmod/chown rights, metadata
> > > operations are grouped into one read and one write right.
> > > 
> > > Landlock evaluates access rights on a per-path basis, but the metadata
> > > related LSM hooks (inode_getattr, inode_setattr, inode_setxattr,
> > > inode_getxattr, inode_listxattr, inode_removexattr, inode_set_acl,
> > > inode_get_acl, inode_remove_acl) only receive the dentry of the accessed
> > > object.  Patches 1-7 therefore first pass struct path instead of dentry
> > > through the metadata-related VFS helpers and LSM hooks.  This is a pure
> > > refactoring with no behavior change, split so that every patch builds
> > > and works on its own:
> > > 
> > >    1: notify_change() and its callers
> > >    2: inode_setsecctx hook (must come before 3: the SELinux and Smack
> > >       implementations call __vfs_setxattr_locked internally)
> > >    3: xattr helpers, which also drops a redundant EVM xattr size sanity
> > >       check whose vfs_getxattr() call only has a dentry and therefore
> > >       cannot be migrated to the new path-based signature
> > >    4: POSIX ACL helpers
> > >    5: inode_setattr hook
> > >    6: inode xattr hooks
> > >    7: inode POSIX ACL hooks
> > > 
> > > Two deliberate scoping decisions for this refactor:
> > > 
> > > - The hooks consistently take struct path rather than struct file.  The
> > >    VFS call sites involved (chmod(2), chown(2), utimensat(2), xattr(2)
> > >    and ACL syscalls) operate on paths, and several of them (lstat(2),
> > >    lchown(2), llistxattr(2), ...) have no struct file to begin with.
> > > 
> > > - struct inode_operations->setattr still receives (idmap, dentry, attr).
> > >    Only the VFS boundary (notify_change()) and the LSM hook layer see the
> > >    path, which keeps the refactor contained to fs/attr.c and the LSM
> > >    infrastructure instead of touching every filesystem.
> > > 
> > > Patches 8-12 then implement the new rights, their tests, the sandboxer
> > > sample and the documentation.  Semantics:
> > > 
> > > - READ_METADATA covers stat(2) and friends, getxattr(2) and friends,
> > >    listxattr(2) and friends, and POSIX ACL reads.
> > > - WRITE_METADATA covers chmod(2), chown(2), utimensat(2), setxattr(2),
> > >    removexattr(2) and friends, and POSIX ACL set and remove.
> > > - Only explicit metadata changes requested by user space are restricted.
> > >    Implicit changes performed by the kernel (e.g. timestamp updates on
> > >    write(2), size changes on truncate(2)) are not, and neither are
> > >    chmod(2)/chown(2) calls that change nothing (e.g. chown(2) with
> > >    (-1, -1), which never reaches the hook), matching the SELinux
> > >    inode_setattr behavior.
> > > - Kernel-internal accesses performed with override_creds() (e.g.
> > >    overlayfs, cachefiles) and kernel threads without a Landlock domain
> > >    (e.g. nfsd, ksmbd) are not restricted.
> > > 
> > > The Landlock ABI version is incremented from 11 to 12.
> > > 
> > > The series is based on linux-next commit 5c4d4169604b ("Add linux-next
> > > specific files for 20260921").
> > > 
> > > Testing: each patch has been built for aarch64 (gcc, -Werror) and the
> > > landlock selftests (445 tests, including the new ones) pass in QEMU on
> > > aarch64; base_test reports ABI v12.
> > > 
> > > [1] https://lore.kernel.org/all/20220827111215.131442-1-xiujianfeng@huawei.com/
> > > [2] https://lore.kernel.org/all/abc960a1-e66e-792e-6869-cfd201c29dbe@digikod.net/
> > Thank you for sending this patch set!
> > 
> > Some meta-remarks at the beginning:
> > 
> > * You might want to link the bugtracker feature request:
> >    https://github.com/landlock-lsm/linux/issues/11
> > * In the final version, I think it's preferred to merge patches 8
> >    (adding the access right enums) and 9 (adding the LSM hooks that use
> >    them).  Having the feature as an atomic commit makes it harder to
> >    accidentally mess it up during a backport, because you can't patch 8
> >    without 9.
> > * As Paul alluded to, the changes to the LSM hook interface and to the
> >    existing callers in VFS are likely the hardest part of this patch
> >    set.  Alexei from the BPF subsystem has also reiterated recently
> >    that he wants BPF to be looped into such changes.  BPF hooks do not
> >    give the same backwards compatibility guarantees as the syscall
> >    layer, but there are existing users of LSM hooks specifically
> >    through the BPF LSM.
> > 
> > * In https://github.com/landlock-lsm/linux/issues/18, we came across
> >    statfs(), which returns file system meta-information based for the
> >    file system that a given file belongs to.  I have weak confidence
> >    that READ_METADATA would be the right access right to protect this
> >    with, but it's a somewhat related operation.  Maybe you have some
> >    thoughts on this?
> > 
> > More concrete questions:
> > 
> > * If a "inode" LSM hook gets a "path" argument now, should it be
> >    renamed from "inode_..." to "path_..."?
> > 
> >    (Maybe the BPF people can chime in about to what extent that would
> >    cause additional churn for BPF users, in a situation where they
> >    anyway already need to make a change due to the changing function
> >    signature?)
> > 
> > –Günther
> 

      reply	other threads:[~2026-09-28 19:47 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-24 10:48 [PATCH RFC -next 00/12] landlock: Add READ_METADATA and WRITE_METADATA access rights Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 01/12] fs: pass struct path to notify_change() Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 02/12] LSM: pass struct path to the inode_setsecctx hook Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 03/12] fs: pass struct path to xattr helpers Cai Xinchen
2026-09-24 11:12   ` Amir Goldstein
2026-09-28  8:44     ` Cai Xinchen
2026-10-06 15:31   ` Casey Schaufler
2026-09-24 10:48 ` [PATCH RFC -next 04/12] fs: pass struct path to POSIX ACL helpers Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 05/12] LSM: pass struct path to the inode_setattr hook Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 06/12] LSM: pass struct path to the inode xattr hooks Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 07/12] LSM: pass struct path to the inode posix acl hooks Cai Xinchen
2026-10-06 15:30   ` Casey Schaufler
2026-09-24 10:48 ` [PATCH RFC -next 08/12] landlock: Add READ_METADATA and WRITE_METADATA access rights Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 09/12] landlock: Implement metadata access hooks Cai Xinchen
2026-09-26  8:38   ` Günther Noack
2026-09-28  6:19     ` Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 10/12] selftests/landlock: Add tests for metadata access rights Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 11/12] samples/landlock: Add metadata rights to sandboxer Cai Xinchen
2026-09-24 10:48 ` [PATCH RFC -next 12/12] Documentation: Update landlock doc for metadata rights Cai Xinchen
2026-09-25 15:33 ` [PATCH RFC -next 00/12] landlock: Add READ_METADATA and WRITE_METADATA access rights Christian Brauner
2026-09-25 17:07   ` Paul Moore
2026-09-28 19:27     ` Mickaël Salaün
2026-09-25 18:03 ` Justin Suess
2026-09-26  7:56   ` Günther Noack
2026-09-28 17:13     ` Justin Suess
2026-09-28 19:25       ` Mickaël Salaün
2026-09-29 12:12       ` Günther Noack
2026-09-29 17:27         ` Justin Suess
2026-09-29 18:51           ` Mickaël Salaün
2026-10-01 13:47             ` Justin Suess
2026-09-26  8:27 ` Günther Noack
2026-09-28  6:52   ` Cai Xinchen
2026-09-28 19:46     ` Mickaël Salaün [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260928.phei6Ohmeiba@digikod.net \
    --to=mic@digikod.net \
    --cc=Dai.Ngo@oracle.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=amir73il@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=bpf@vger.kernel.org \
    --cc=brauner@kernel.org \
    --cc=caixinchen1@huawei.com \
    --cc=casey@schaufler-ca.com \
    --cc=cel@kernel.org \
    --cc=chenxiaosong@chenxiaosong.com \
    --cc=code@tyhicks.com \
    --cc=corbet@lwn.net \
    --cc=dakr@kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dhowells@redhat.com \
    --cc=djwong@kernel.org \
    --cc=dlemoal@kernel.org \
    --cc=dmitry.kasatkin@gmail.com \
    --cc=driver-core@lists.linux.dev \
    --cc=ecryptfs@vger.kernel.org \
    --cc=eric.snowberg@oracle.com \
    --cc=exfat@lists.linux.dev \
    --cc=gnoack3000@gmail.com \
    --cc=gnoack@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@lst.de \
    --cc=hirofumi@mail.parknet.co.jp \
    --cc=jack@suse.cz \
    --cc=jlayton@kernel.org \
    --cc=jmorris@namei.org \
    --cc=kpsingh@kernel.org \
    --cc=linkinjeon@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=lujialin4@huawei.com \
    --cc=matt@bobrowski.net \
    --cc=miklos@szeredi.hu \
    --cc=nanx95726@gmail.com \
    --cc=neil@brown.name \
    --cc=netfs@lists.linux.dev \
    --cc=okorniev@redhat.com \
    --cc=omosnacek@gmail.com \
    --cc=paul@paul-moore.com \
    --cc=rafael@kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=roberto.sassu@huawei.com \
    --cc=selinux@vger.kernel.org \
    --cc=senozhatsky@chromium.org \
    --cc=serge@hallyn.com \
    --cc=sj1557.seo@samsung.com \
    --cc=skhan@linuxfoundation.org \
    --cc=stephen.smalley.work@gmail.com \
    --cc=tom@talpey.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=xiujianfeng@huawei.com \
    --cc=yuezhang.mo@sony.com \
    --cc=zohar@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.