[LTP] [PATCH 1/5] fanotify20: Allow FAN_REPORT_PIDFD with FAN_REPORT_TID on v7.2+

Jan Kara jack@suse.cz
Tue Jun 16 13:48:44 CEST 2026


On Tue 16-06-26 13:27:20, Amir Goldstein wrote:
> On Tue, Jun 16, 2026 at 9:40 AM Jan Kara <jack@suse.cz> wrote:
> >
> > On Tue 16-06-26 02:06:25, AnonymeMeow wrote:
> > > fanotify_init() used to reject FAN_REPORT_PIDFD combined with
> > > FAN_REPORT_TID with EINVAL. Since Linux v7.2, fanotify supports
> > > reporting pidfds for thread IDs, so this combination is expected to
> > > succeed.
> > >
> > > Keep expecting EINVAL on older kernels and adjust the test expectation
> > > based on the running kernel version.
> > >
> > > Signed-off-by: AnonymeMeow <anonymemeow@gmail.com>
> >
> > Thanks for the fixes! Some comment below. And take your time with final
> > exams, that's more important than some failing LTP tests :)
> >
> > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify20.c b/testcases/kernel/syscalls/fanotify/fanotify20.c
> > > index b32ecf6aa..9a78f6ff0 100644
> > > --- a/testcases/kernel/syscalls/fanotify/fanotify20.c
> > > +++ b/testcases/kernel/syscalls/fanotify/fanotify20.c
> > > @@ -8,13 +8,14 @@
> > >
> > >  /*\
> > >   * This source file contains a test case which ensures that the
> > > - * :manpage:`fanotify(7)` API returns an expected error code when provided an
> > > - * invalid initialization flag alongside FAN_REPORT_PIDFD. Additionally, it
> > > - * checks that the operability with existing FAN_REPORT_* flags is maintained
> > > - * and functioning as intended.
> > > + * :manpage:`fanotify(7)` API returns an expected error code when provided
> > > + * unsupported initialization flags, e.g. FAN_REPORT_PIDFD combined with
> > > + * FAN_REPORT_TID. Additionally, it checks that the operability with
> > > + * supported FAN_REPORT_* flags is maintained and functioning as intended.
> > >   *
> > >   * NOTE: FAN_REPORT_PIDFD support was added in v5.15-rc1 in
> > >   * af579beb666a ("fanotify: add pidfd support to the fanotify API").
> > > + * FAN_REPORT_PIDFD combined with FAN_REPORT_TID is supported since v7.2-rc1.
> 
> Can add the upstream commit here.
> 
> > >   */
> > >
> > >  #define _GNU_SOURCE
> > > @@ -26,8 +27,10 @@
> > >
> > >  #define MOUNT_PATH   "fs_mnt"
> > >  #define FLAGS_DESC(x) .flags = x, .desc = #x
> > > +#define PIDFD_TID_FLAGS (FAN_REPORT_PIDFD | FAN_REPORT_TID)
> > >
> > >  static int fd;
> > > +static int thread_pidfd_supported;
> > >
> > >  static struct test_case_t {
> > >       unsigned int flags;
> > > @@ -51,17 +54,21 @@ static void do_setup(void)
> > >        */
> > >       REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(FAN_REPORT_PIDFD,
> > >                                                   MOUNT_PATH);
> > > +
> > > +     thread_pidfd_supported = tst_kvercmp(7, 2, 0) >= 0;
> > >  }
> > >
> > >  static void do_test(unsigned int i)
> > >  {
> > >       struct test_case_t *tc = &test_cases[i];
> > > +     int exp_errno = (tc->flags & PIDFD_TID_FLAGS) == PIDFD_TID_FLAGS &&
> > > +                     thread_pidfd_supported ? 0 : tc->exp_errno;
> > >
> > > -     tst_res(TINFO, "Test %s on %s", tc->exp_errno ? "fail" : "pass",
> > > +     tst_res(TINFO, "Test %s on %s", exp_errno ? "fail" : "pass",
> > >               tc->desc);
> > >
> > >       TST_EXP_FD_OR_FAIL(fd = fanotify_init(tc->flags, O_RDONLY),
> > > -                        tc->exp_errno);
> > > +                        exp_errno);
> >
> > Hum, this looks somewhat ugly. Ideally we'd initialize test case .exp_errno
> > accordingly to the expected return of the syscall (but that's not really
> > possible because the initializer has to be constant). Checking how other
> > tests handle it, I think we can clone the tests to two. One that expects
> > failure and is skipped for kernels >= 7.2 and one that expects success and
> > is skipped for kernels < 7.2. And we can have in the test description
> > .min_kver and .max_kver fields that would store for which kernel versions
> > the test should be performed.
> 
> LOL there is nothing to test in the >= 7.2 test.
> 
> The test that these flag combination are allowed:
>                 FLAGS_DESC(FAN_REPORT_PIDFD | FAN_REPORT_TID),
>                 FLAGS_DESC(FAN_REPORT_PIDFD | FAN_REPORT_FID |
> FAN_REPORT_DFID_NAME),
> 
> Is already "tested" by the tests that use them.
> and we don't have any tests that >= 5.10 has support for
> FAN_MARK_FILESYSTEM etc.
> 
> Easiest is to just skip fanotify20 for version >= 7.2

Right, I probably overengineered this :) Just skip the test for newer
kernel versions.

								Honza
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR


More information about the ltp mailing list