Hi Jan & Christian,

 ---- On Mon, 27 Jul 2026 23:57:14 +0800  Jan Kara <[email protected]> wrote --- 
 > On Wed 22-07-26 14:07:37, Christian Brauner wrote:
 > > On 2026-07-16 13:11 +0200, Jan Kara wrote:
 > > > On Thu 16-07-26 13:27:22, Li Chen wrote:
 > > > > PIDFD_THREAD shares O_EXCL. do_dentry_open() clears O_EXCL after
 > > > > pidfs_export_open() validates the flags, so open_by_handle_at()
 > > > > silently turns a thread pidfd into a process pidfd.
 > > > > 
 > > > > Restore PIDFD_THREAD on the opened file, matching pidfs_alloc_file(),
 > > > > and cover the restored flag with F_GETFL.
 > > > > 
 > > > > Signed-off-by: Li Chen <[email protected]>
 > > > 
 > > > Makes sense. Just looking at this code, what about PIDFD_AUTOKILL (aka
 > > > O_TRUNC?)? Reading the commit introducing it 07c3ef58223e it appears it 
 > > > was
 > > > never meant to be directly requested by userspace so probably
 > > > pidfs_export_open() needs to reject it. But that's unrelated issue to 
 > > > your
 > > > patch so feel free to add:
 > > 
 > > Good point. But pidfs_export_open() is guarded by
 > > pidfs_export_permission() which does:
 > > 
 > > #define VALID_FILE_HANDLE_OPEN_FLAGS \
 > >     (O_RDONLY | O_WRONLY | O_RDWR | O_NONBLOCK | O_CLOEXEC | O_EXCL)
 > > 
 > >     if (oflags & ~(VALID_FILE_HANDLE_OPEN_FLAGS | O_LARGEFILE))
 > >         return -EINVAL;
 > > 
 > > and so is safe. But I've added the following patch on top which also
 > > splats if that is passed!
 > > 
 > > From 99a859485394eca8cf6271de09ae72ac3b846bda Mon Sep 17 00:00:00 2001
 > > From: Christian Brauner <[email protected]>
 > > Date: Wed, 22 Jul 2026 13:56:28 +0200
 > > Subject: [PATCH] pidfs: add pidfs_dentry_open() helper
 > > 
 > > Both pidfs_alloc_file() and pidfs_export_open() need to force O_RDWR
 > > and reapply the pidfd flags that do_dentry_open() strips. Move the
 > > common logic into a helper.
 > > 
 > > PIDFD_AUTOKILL is now part of the restore mask in the file handle path
 > > as well, but pidfs_export_permission() rejects O_TRUNC, so this is a
 > > no-op there. But warn nonetheless.
 > > 
 > > Signed-off-by: Christian Brauner (Amutable) <[email protected]>
 > 
 > Nice! Feel free to add:
 > 
 > Reviewed-by: Jan Kara <[email protected]>
 > 

  > Both pidfs_alloc_file() and pidfs_export_open() need to force O_RDWR
  > and reapply the pidfd flags that do_dentry_open() strips. Move the
  > common logic into a helper.

Thanks both.

Jan, thanks for pointing out the PIDFD_AUTOKILL angle.

Christian, thanks for factoring this into pidfs_dentry_open() and
applying the fix.

Regards,
Li​



Reply via email to