All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Günther Noack" <gnoack@google.com>
To: "Mickaël Salaün" <mic@digikod.net>
Cc: Christian Brauner <brauner@kernel.org>,
	linux-security-module@vger.kernel.org,
	Paul Moore <paul@paul-moore.com>,
	Amir Goldstein <amir73il@gmail.com>,
	Miklos Szeredi <miklos@szeredi.hu>,
	Serge Hallyn <serge@hallyn.com>,
	Stephen Smalley <stephen.smalley.work@gmail.com>
Subject: Re: [PATCH v4 3/5] selftests/landlock: Add tests for whiteout object creation
Date: Fri, 31 Jul 2026 16:18:25 +0200	[thread overview]
Message-ID: <amyusSlNoIHj2cEF@google.com> (raw)
In-Reply-To: <20260731.ichi2taiQuuc@digikod.net>

On Fri, Jul 31, 2026 at 03:22:40PM +0200, Mickaël Salaün wrote:
> On Fri, Jul 24, 2026 at 06:10:02PM +0200, Günther Noack wrote:
> > Add a test to check that whiteout object creation is guarded by
> > LANDLOCK_ACCESS_FS_MAKE_REG, in the cases where these are created from
> > userspace:
> > 
> > * Conventional creation with mknod()
> > * Linking or renaming an existing whiteout object
> > * renameat2() with RENAME_WHITEOUT,
> >   which creates a new whiteout object in the source location
> > 
> > Signed-off-by: Günther Noack <gnoack@google.com>
> > ---
> >  tools/testing/selftests/landlock/fs_test.c | 22 ++++++++++++++++++++++
> >  1 file changed, 22 insertions(+)
> > 
> > diff --git a/tools/testing/selftests/landlock/fs_test.c b/tools/testing/selftests/landlock/fs_test.c
> > index e82b56a74c5f..fe5faeca83eb 100644
> > --- a/tools/testing/selftests/landlock/fs_test.c
> > +++ b/tools/testing/selftests/landlock/fs_test.c
> > @@ -2247,6 +2247,19 @@ TEST_F_FORK(layout1, rename_file)
> >  			       RENAME_EXCHANGE));
> >  }
> >  
> > +TEST_F_FORK(layout1, rename_whiteout_denied)
> > +{
> > +	enforce_fs(_metadata, LANDLOCK_ACCESS_FS_MAKE_REG, NULL);
> > +
> > +	/*
> > +	 * Try to rename a file with RENAME_WHITEOUT.
> > +	 * file1_s3d3 is in dir_s3d2 (tmpfs), so it supports RENAME_WHITEOUT.
> > +	 */
> > +	EXPECT_EQ(-1, renameat2(AT_FDCWD, file1_s3d3, AT_FDCWD,
> > +				TMP_DIR "/s3d1/s3d2/s3d3/f2", RENAME_WHITEOUT));
> > +	EXPECT_EQ(EACCES, errno);
> > +}
> 
> rename_whiteout_denied could not fail.  It moves a regular file, whose
> own creation already requires MAKE_REG, and a same-directory rename
> merges both parent directories' requirements, so its EACCES came from
> the moved file and not from the whiteout: it passes unchanged with the
> whiteout checks removed from fs.c .  Moving a named pipe with MAKE_FIFO
> granted leaves MAKE_REG required for the whiteout alone.

Good catch -- renaming a FIFO makes this test more useful. Fixed (and double
checked by breaking the implementation, to see that it gets caught).


> Four cases are then unexercised, each covering something a bug could
> have broken silently:
> 
> - allowing RENAME_WHITEOUT where MAKE_REG is granted, since a check that
>   denied unconditionally would have passed the denial test;
> 
> - reparenting, since a same-directory rename merges both parents and so
>   cannot show that the whiteout is charged to the source directory;
> 
> - the audit record, since the denial now reports fs.make_reg where it
>   used to report fs.make_char, and nothing pinned which;
> 
> - RENAME_EXCHANGE of an existing whiteout, the only operation needing
>   that right in the source directory, and the case that shows the
>   reclassification covers moving a whiteout and not only creating one.

(Note to self, I still need to look into these)

 - needs a rename_whiteout_allowed or similar check
 - by testing reparenting, the test can check in which of the two directories
   MAKE_REG is allowed
 - updated audit test for whiteouts
 - rename_exchange case -- maybe double check whether this should be tested
   in test_make_file() in a generic way?

> > +
> >  TEST_F_FORK(layout1, rename_dir)
> >  {
> >  	const struct rule rules[] = {
> > @@ -3270,6 +3283,14 @@ TEST_F_FORK(layout1, make_char)
> >  		       makedev(1, 3));
> >  }
> >  
> > +TEST_F_FORK(layout1, make_whiteout)
> > +{
> > +	/* Creates a whiteout object (creation guarded by MAKE_REG). */
> > +	set_cap(_metadata, CAP_MKNOD);
> 
> CAP_MKNOD was never needed for whiteout.

Done.


—Günther


  reply	other threads:[~2026-07-31 14:18 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-24 16:09 [PATCH v4 0/5] landlock: Restrict whiteout object creation Günther Noack
2026-07-24 16:10 ` [PATCH v4 1/5] selftests/landlock: Use an actual chardev for MAKE_CHAR audit test Günther Noack
2026-07-24 16:10 ` [PATCH v4 2/5] landlock: Require LANDLOCK_ACCESS_FS_MAKE_REG for whiteout creation Günther Noack
2026-07-31 11:07   ` Mickaël Salaün
2026-07-31 13:13     ` Günther Noack
2026-07-31 14:21     ` Günther Noack
2026-07-31 15:14       ` Mickaël Salaün
2026-07-31 13:13   ` Mickaël Salaün
2026-07-31 14:05     ` Günther Noack
2026-07-24 16:10 ` [PATCH v4 3/5] selftests/landlock: Add tests for whiteout object creation Günther Noack
2026-07-31 13:22   ` Mickaël Salaün
2026-07-31 14:18     ` Günther Noack [this message]
2026-07-24 16:10 ` [PATCH v4 4/5] selftests/landlock: Test whiteout object behaviour in OverlayFS renames Günther Noack
2026-07-31 13:43   ` Mickaël Salaün
2026-07-24 16:10 ` [PATCH v4 5/5] landlock: Link the erratum documentation for whiteout objects Günther Noack

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=amyusSlNoIHj2cEF@google.com \
    --to=gnoack@google.com \
    --cc=amir73il@gmail.com \
    --cc=brauner@kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=mic@digikod.net \
    --cc=miklos@szeredi.hu \
    --cc=paul@paul-moore.com \
    --cc=serge@hallyn.com \
    --cc=stephen.smalley.work@gmail.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.