From: Matthew Bobrowski via ltp <ltp@lists.linux.it>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Gabriel Krisman Bertazi <krisman@collabora.com>,
Jan Kara <jack@suse.cz>, LTP List <ltp@lists.linux.it>
Subject: Re: [LTP] [PATCH 1/2] syscalls/fanotify20: add new test for FAN_REPORT_PIDFD
Date: Tue, 2 Nov 2021 08:05:09 +1100 [thread overview]
Message-ID: <YYBWhWMS0TtdcMyj@google.com> (raw)
In-Reply-To: <CAOQ4uxiioYbWTFF43WiWjqNgjBA_fyLu33QVXx_u7A6Z0mg7dQ@mail.gmail.com>
On Wed, Oct 27, 2021 at 01:24:50PM +0300, Amir Goldstein wrote:
> On Wed, Oct 27, 2021 at 12:45 PM Matthew Bobrowski <repnop@google.com> wrote:
> >
> > This test ensures that the fanotify API returns the expected error
> > status code -EINVAL when an invalid flag is supplied alongside the new
> > FAN_REPORT_PIDFD initialization flag. Currently, FAN_REPORT_TID is the
> > only initialization flag that is not permitted in conjunction with
> > FAN_REPORT_PIDFD, so we explicitly provide test coverage for this.
> >
> > We also add an extra trivial test case to ensure that the
> > initialization behavior with the other FAN_REPORT_* related flags is
> > working as intended.
> >
> > Signed-off-by: Matthew Bobrowski <repnop@google.com>
>
> Reviewed-by: Amir Goldstein <amir73il@gmail.com>
>
> > ---
> > configure.ac | 2 +-
> > testcases/kernel/syscalls/fanotify/.gitignore | 1 +
> > testcases/kernel/syscalls/fanotify/fanotify.h | 21 +++
> > .../kernel/syscalls/fanotify/fanotify20.c | 133 ++++++++++++++++++
> > 4 files changed, 156 insertions(+), 1 deletion(-)
> > create mode 100644 testcases/kernel/syscalls/fanotify/fanotify20.c
> >
> > diff --git a/configure.ac b/configure.ac
> > index 5bf3c52ec..b62ec5e15 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -159,7 +159,7 @@ AC_CHECK_MEMBERS([struct utsname.domainname],,,[
> > AC_CHECK_TYPES([enum kcmp_type],,,[#include <linux/kcmp.h>])
> > AC_CHECK_TYPES([struct acct_v3],,,[#include <sys/acct.h>])
> > AC_CHECK_TYPES([struct af_alg_iv, struct sockaddr_alg],,,[# include <linux/if_alg.h>])
> > -AC_CHECK_TYPES([struct fanotify_event_info_fid, struct fanotify_event_info_header],,,[#include <sys/fanotify.h>])
> > +AC_CHECK_TYPES([struct fanotify_event_info_fid, struct fanotify_event_info_header, struct fanotify_event_info_pidfd],,,[#include <sys/fanotify.h>])
> > AC_CHECK_TYPES([struct file_dedupe_range],,,[#include <linux/fs.h>])
> >
> > AC_CHECK_TYPES([struct file_handle],,,[
> > diff --git a/testcases/kernel/syscalls/fanotify/.gitignore b/testcases/kernel/syscalls/fanotify/.gitignore
> > index 9554b16b1..c99e6fff7 100644
> > --- a/testcases/kernel/syscalls/fanotify/.gitignore
> > +++ b/testcases/kernel/syscalls/fanotify/.gitignore
> > @@ -17,4 +17,5 @@
> > /fanotify17
> > /fanotify18
> > /fanotify19
> > +/fanotify20
> > /fanotify_child
> > diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
> > index a2be18338..da212d953 100644
> > --- a/testcases/kernel/syscalls/fanotify/fanotify.h
> > +++ b/testcases/kernel/syscalls/fanotify/fanotify.h
> > @@ -78,6 +78,9 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
> > #define FAN_REPORT_NAME 0x00000800
> > #define FAN_REPORT_DFID_NAME (FAN_REPORT_DIR_FID | FAN_REPORT_NAME)
> > #endif
> > +#ifndef FAN_REPORT_PIDFD
> > +#define FAN_REPORT_PIDFD 0x00000080
> > +#endif
> >
> > /* Non-uapi convenience macros */
> > #ifndef FAN_REPORT_DFID_NAME_FID
> > @@ -125,6 +128,14 @@ static inline int safe_fanotify_mark(const char *file, const int lineno,
> > #define FAN_OPEN_EXEC_PERM 0x00040000
> > #endif
> >
> > +/* Additional error status codes that can be returned to userspace */
> > +#ifndef FAN_NOPIDFD
> > +#define FAN_NOPIDFD -1
> > +#endif
> > +#ifndef FAN_EPIDFD
> > +#define FAN_EPIDFD -2
> > +#endif
> > +
> > /* Flags required for unprivileged user group */
> > #define FANOTIFY_REQUIRED_USER_INIT_FLAGS (FAN_REPORT_FID)
> >
> > @@ -164,6 +175,9 @@ typedef struct {
> > #ifndef FAN_EVENT_INFO_TYPE_DFID
> > #define FAN_EVENT_INFO_TYPE_DFID 3
> > #endif
> > +#ifndef FAN_EVENT_INFO_TYPE_PIDFD
> > +#define FAN_EVENT_INFO_TYPE_PIDFD 4
> > +#endif
> >
> > #ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_HEADER
> > struct fanotify_event_info_header {
> > @@ -181,6 +195,13 @@ struct fanotify_event_info_fid {
> > };
> > #endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID */
> >
> > +#ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_PIDFD
> > +struct fanotify_event_info_pidfd {
> > + struct fanotify_event_info_header hdr;
> > + int32_t pidfd;
> > +};
> > +#endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_PIDFD */
> > +
> > /* NOTE: only for struct fanotify_event_info_fid */
> > #ifdef HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID_FSID___VAL
> > # define FSID_VAL_MEMBER(fsid, i) (fsid.__val[i])
> > diff --git a/testcases/kernel/syscalls/fanotify/fanotify20.c b/testcases/kernel/syscalls/fanotify/fanotify20.c
> > new file mode 100644
> > index 000000000..3e7ca697e
> > --- /dev/null
> > +++ b/testcases/kernel/syscalls/fanotify/fanotify20.c
> > @@ -0,0 +1,133 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + * Copyright (c) 2021 Google. All Rights Reserved.
> > + *
> > + * Started by Matthew Bobrowski <repnop@google.com>
> > + */
> > +
> > +/*\
> > + * [Description]
> > + *
> > + * This source file contains a test case which ensures that the fanotify 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.
> > + */
> > +
> > +#define _GNU_SOURCE
> > +#include "tst_test.h"
> > +#include <errno.h>
> > +
> > +#ifdef HAVE_SYS_FANOTIFY_H
> > +#include "fanotify.h"
> > +
> > +#define MOUNT_PATH "fs_mnt"
> > +
> > +static int fanotify_fd;
> > +
> > +static struct test_case_t {
> > + char *name;
> > + unsigned int init_flags;
> > + int want_err;
> > + int want_errno;
> > +} test_cases[] = {
> > + {
> > + "fail on FAN_REPORT_PIDFD | FAN_REPORT_TID",
> > + FAN_REPORT_PIDFD | FAN_REPORT_TID,
> > + 1,
> > + EINVAL,
> > + },
> > + {
> > + "pass on FAN_REPORT_PIDFD | FAN_REPORT_FID | FAN_REPORT_DFID_NAME",
> > + FAN_REPORT_PIDFD | FAN_REPORT_FID | FAN_REPORT_DFID_NAME ,
> > + 0,
> > + 0,
> > + },
> > +};
> > +
> > +static void do_setup(void)
> > +{
> > + int ret;
> > +
> > + /*
> > + * An explicit check for FAN_REPORT_PIDFD is performed early on in the
> > + * test initialization as it's a prerequisite for all test cases.
> > + */
> > + if ((ret = fanotify_init_flags_supported_by_kernel(FAN_REPORT_PIDFD))) {
> > + fanotify_init_flags_err_msg("FAN_REPORT_PIDFD", __FILE__,
> > + __LINE__, tst_brk_, ret);
> > + }
>
> Since this test is expected to be merged before Gabriel's FAN_FS_ERROR tests
> I suggest to pick some of Gabriel's prep patches and use a macro here.
> Not a must.
Right, let me take a look through Gabriel's series and adapt the
relevant macro.
/M
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2021-11-01 21:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-27 9:44 [LTP] [PATCH 0/2] Test support for new fanotify FAN_REPORT_PIDFD feature Matthew Bobrowski via ltp
2021-10-27 9:44 ` [LTP] [PATCH 1/2] syscalls/fanotify20: add new test for FAN_REPORT_PIDFD Matthew Bobrowski via ltp
2021-10-27 10:24 ` Amir Goldstein
2021-10-29 15:04 ` Gabriel Krisman Bertazi
2021-11-01 21:09 ` Matthew Bobrowski via ltp
2021-11-01 21:05 ` Matthew Bobrowski via ltp [this message]
2021-10-27 9:45 ` [LTP] [PATCH 2/2] syscalls/fanotify21: add new test checking the returned pidfd from fanotify in FAN_REPORT_PIDFD mode Matthew Bobrowski via ltp
2021-10-27 10:35 ` Amir Goldstein
2021-11-01 21:16 ` Matthew Bobrowski via ltp
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=YYBWhWMS0TtdcMyj@google.com \
--to=ltp@lists.linux.it \
--cc=amir73il@gmail.com \
--cc=jack@suse.cz \
--cc=krisman@collabora.com \
--cc=repnop@google.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.