All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: ltp@lists.linux.it, jack@suse.com, amir73il@gmail.com
Cc: khazhy@google.com, kernel@collabora.com,
	linux-ext4@vger.kernel.org, repnop@google.com,
	Gabriel Krisman Bertazi <krisman@collabora.com>
Subject: [PATCH v2 02/10] syscalls: fanotify: Add macro to require specific events
Date: Tue, 26 Oct 2021 15:42:31 -0300	[thread overview]
Message-ID: <20211026184239.151156-3-krisman@collabora.com> (raw)
In-Reply-To: <20211026184239.151156-1-krisman@collabora.com>

Add a helper for tests to fail if an event is not available in the
kernel.  Since some events only work with REPORT_FID or a specific
class, update the verifier to allow those to be specified.

Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
---
 testcases/kernel/syscalls/fanotify/fanotify.h | 28 +++++++++++++++++--
 .../kernel/syscalls/fanotify/fanotify03.c     |  4 +--
 .../kernel/syscalls/fanotify/fanotify10.c     |  3 +-
 .../kernel/syscalls/fanotify/fanotify12.c     |  3 +-
 4 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
index c67db3117e29..b2b56466d028 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify.h
+++ b/testcases/kernel/syscalls/fanotify/fanotify.h
@@ -266,14 +266,26 @@ static inline void require_fanotify_access_permissions_supported_by_kernel(void)
 	SAFE_CLOSE(fd);
 }
 
-static inline int fanotify_events_supported_by_kernel(uint64_t mask)
+static inline int fanotify_events_supported_by_kernel(uint64_t mask,
+						      unsigned int init_flags,
+						      unsigned int mark_flags)
 {
 	int fd;
 	int rval = 0;
 
-	fd = SAFE_FANOTIFY_INIT(FAN_CLASS_CONTENT, O_RDONLY);
+	fd = fanotify_init(init_flags, O_RDONLY);
 
-	if (fanotify_mark(fd, FAN_MARK_ADD, mask, AT_FDCWD, ".") < 0) {
+	if (fd < 0) {
+		if (errno == EINVAL) {
+			rval = -1;
+		} else {
+			tst_brk(TBROK | TERRNO,
+				"fanotify_init (%d, FAN_CLASS_CONTENT, ..., 0_RDONLY", fd);
+		}
+		goto out;
+	}
+
+	if (fanotify_mark(fd, FAN_MARK_ADD | mark_flags, mask, AT_FDCWD, ".") < 0) {
 		if (errno == EINVAL) {
 			rval = -1;
 		} else {
@@ -284,6 +296,7 @@ static inline int fanotify_events_supported_by_kernel(uint64_t mask)
 
 	SAFE_CLOSE(fd);
 
+out:
 	return rval;
 }
 
@@ -378,4 +391,13 @@ static inline int fanotify_mark_supported_by_kernel(uint64_t flag)
 				    fanotify_mark_supported_by_kernel(mark_type)); \
 } while (0)
 
+#define REQUIRE_FANOTIFY_EVENTS_SUPPORTED_ON_FS(init_flags, mark_type, mask, fname) do { \
+	if (mark_type)							\
+		REQUIRE_MARK_TYPE_SUPPORTED_ON_KERNEL(mark_type);	\
+	if (init_flags)							\
+		REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(init_flags, fname); \
+	fanotify_init_flags_err_msg(#mask, __FILE__, __LINE__, tst_brk_, \
+		fanotify_events_supported_by_kernel(mask, init_flags, mark_type)); \
+} while (0)
+
 #endif /* __FANOTIFY_H__ */
diff --git a/testcases/kernel/syscalls/fanotify/fanotify03.c b/testcases/kernel/syscalls/fanotify/fanotify03.c
index 26d17e64d1f5..2081f0bd1b57 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify03.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify03.c
@@ -323,8 +323,8 @@ static void setup(void)
 	require_fanotify_access_permissions_supported_by_kernel();
 
 	filesystem_mark_unsupported = fanotify_mark_supported_by_kernel(FAN_MARK_FILESYSTEM);
-	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC_PERM);
-
+	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC_PERM,
+								      FAN_CLASS_CONTENT, 0);
 	sprintf(fname, MOUNT_PATH"/fname_%d", getpid());
 	SAFE_FILE_PRINTF(fname, "1");
 
diff --git a/testcases/kernel/syscalls/fanotify/fanotify10.c b/testcases/kernel/syscalls/fanotify/fanotify10.c
index 92e4d3ff3054..0fa9d1f4f7e4 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify10.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify10.c
@@ -509,7 +509,8 @@ cleanup:
 
 static void setup(void)
 {
-	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC);
+	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC,
+								      FAN_CLASS_CONTENT, 0);
 	filesystem_mark_unsupported = fanotify_mark_supported_by_kernel(FAN_MARK_FILESYSTEM);
 	fan_report_dfid_unsupported = fanotify_init_flags_supported_on_fs(FAN_REPORT_DFID_NAME,
 									  MOUNT_PATH);
diff --git a/testcases/kernel/syscalls/fanotify/fanotify12.c b/testcases/kernel/syscalls/fanotify/fanotify12.c
index 76f1aca77615..d863ae1a7d6d 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify12.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify12.c
@@ -222,7 +222,8 @@ cleanup:
 
 static void do_setup(void)
 {
-	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC);
+	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC,
+								      FAN_CLASS_CONTENT, 0);
 
 	sprintf(fname, "fname_%d", getpid());
 	SAFE_FILE_PRINTF(fname, "1");
-- 
2.33.0


WARNING: multiple messages have this Message-ID (diff)
From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: ltp@lists.linux.it, jack@suse.com, amir73il@gmail.com
Cc: linux-ext4@vger.kernel.org, kernel@collabora.com,
	Gabriel Krisman Bertazi <krisman@collabora.com>,
	khazhy@google.com, repnop@google.com
Subject: [LTP] [PATCH v2 02/10] syscalls: fanotify: Add macro to require specific events
Date: Tue, 26 Oct 2021 15:42:31 -0300	[thread overview]
Message-ID: <20211026184239.151156-3-krisman@collabora.com> (raw)
In-Reply-To: <20211026184239.151156-1-krisman@collabora.com>

Add a helper for tests to fail if an event is not available in the
kernel.  Since some events only work with REPORT_FID or a specific
class, update the verifier to allow those to be specified.

Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
---
 testcases/kernel/syscalls/fanotify/fanotify.h | 28 +++++++++++++++++--
 .../kernel/syscalls/fanotify/fanotify03.c     |  4 +--
 .../kernel/syscalls/fanotify/fanotify10.c     |  3 +-
 .../kernel/syscalls/fanotify/fanotify12.c     |  3 +-
 4 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
index c67db3117e29..b2b56466d028 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify.h
+++ b/testcases/kernel/syscalls/fanotify/fanotify.h
@@ -266,14 +266,26 @@ static inline void require_fanotify_access_permissions_supported_by_kernel(void)
 	SAFE_CLOSE(fd);
 }
 
-static inline int fanotify_events_supported_by_kernel(uint64_t mask)
+static inline int fanotify_events_supported_by_kernel(uint64_t mask,
+						      unsigned int init_flags,
+						      unsigned int mark_flags)
 {
 	int fd;
 	int rval = 0;
 
-	fd = SAFE_FANOTIFY_INIT(FAN_CLASS_CONTENT, O_RDONLY);
+	fd = fanotify_init(init_flags, O_RDONLY);
 
-	if (fanotify_mark(fd, FAN_MARK_ADD, mask, AT_FDCWD, ".") < 0) {
+	if (fd < 0) {
+		if (errno == EINVAL) {
+			rval = -1;
+		} else {
+			tst_brk(TBROK | TERRNO,
+				"fanotify_init (%d, FAN_CLASS_CONTENT, ..., 0_RDONLY", fd);
+		}
+		goto out;
+	}
+
+	if (fanotify_mark(fd, FAN_MARK_ADD | mark_flags, mask, AT_FDCWD, ".") < 0) {
 		if (errno == EINVAL) {
 			rval = -1;
 		} else {
@@ -284,6 +296,7 @@ static inline int fanotify_events_supported_by_kernel(uint64_t mask)
 
 	SAFE_CLOSE(fd);
 
+out:
 	return rval;
 }
 
@@ -378,4 +391,13 @@ static inline int fanotify_mark_supported_by_kernel(uint64_t flag)
 				    fanotify_mark_supported_by_kernel(mark_type)); \
 } while (0)
 
+#define REQUIRE_FANOTIFY_EVENTS_SUPPORTED_ON_FS(init_flags, mark_type, mask, fname) do { \
+	if (mark_type)							\
+		REQUIRE_MARK_TYPE_SUPPORTED_ON_KERNEL(mark_type);	\
+	if (init_flags)							\
+		REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(init_flags, fname); \
+	fanotify_init_flags_err_msg(#mask, __FILE__, __LINE__, tst_brk_, \
+		fanotify_events_supported_by_kernel(mask, init_flags, mark_type)); \
+} while (0)
+
 #endif /* __FANOTIFY_H__ */
diff --git a/testcases/kernel/syscalls/fanotify/fanotify03.c b/testcases/kernel/syscalls/fanotify/fanotify03.c
index 26d17e64d1f5..2081f0bd1b57 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify03.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify03.c
@@ -323,8 +323,8 @@ static void setup(void)
 	require_fanotify_access_permissions_supported_by_kernel();
 
 	filesystem_mark_unsupported = fanotify_mark_supported_by_kernel(FAN_MARK_FILESYSTEM);
-	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC_PERM);
-
+	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC_PERM,
+								      FAN_CLASS_CONTENT, 0);
 	sprintf(fname, MOUNT_PATH"/fname_%d", getpid());
 	SAFE_FILE_PRINTF(fname, "1");
 
diff --git a/testcases/kernel/syscalls/fanotify/fanotify10.c b/testcases/kernel/syscalls/fanotify/fanotify10.c
index 92e4d3ff3054..0fa9d1f4f7e4 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify10.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify10.c
@@ -509,7 +509,8 @@ cleanup:
 
 static void setup(void)
 {
-	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC);
+	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC,
+								      FAN_CLASS_CONTENT, 0);
 	filesystem_mark_unsupported = fanotify_mark_supported_by_kernel(FAN_MARK_FILESYSTEM);
 	fan_report_dfid_unsupported = fanotify_init_flags_supported_on_fs(FAN_REPORT_DFID_NAME,
 									  MOUNT_PATH);
diff --git a/testcases/kernel/syscalls/fanotify/fanotify12.c b/testcases/kernel/syscalls/fanotify/fanotify12.c
index 76f1aca77615..d863ae1a7d6d 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify12.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify12.c
@@ -222,7 +222,8 @@ cleanup:
 
 static void do_setup(void)
 {
-	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC);
+	exec_events_unsupported = fanotify_events_supported_by_kernel(FAN_OPEN_EXEC,
+								      FAN_CLASS_CONTENT, 0);
 
 	sprintf(fname, "fname_%d", getpid());
 	SAFE_FILE_PRINTF(fname, "1");
-- 
2.33.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  parent reply	other threads:[~2021-10-26 18:43 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-26 18:42 [PATCH v2 00/10] Test the new fanotify FAN_FS_ERROR event Gabriel Krisman Bertazi
2021-10-26 18:42 ` [LTP] " Gabriel Krisman Bertazi
2021-10-26 18:42 ` [PATCH v2 01/10] syscalls: fanotify: Add macro to require specific mark types Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  6:10   ` Amir Goldstein
2021-10-27  6:10     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` Gabriel Krisman Bertazi [this message]
2021-10-26 18:42   ` [LTP] [PATCH v2 02/10] syscalls: fanotify: Add macro to require specific events Gabriel Krisman Bertazi
2021-10-27  6:23   ` Amir Goldstein
2021-10-27  6:23     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 03/10] syscalls/fanotify20: Introduce helpers for FAN_FS_ERROR test Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  6:33   ` Amir Goldstein
2021-10-27  6:33     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 04/10] syscalls/fanotify20: Validate the generic error info Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  6:43   ` Amir Goldstein
2021-10-27  6:43     ` [LTP] " Amir Goldstein
2021-10-27 10:19     ` Amir Goldstein
2021-10-27 10:19       ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 05/10] syscalls/fanotify20: Validate incoming FID in FAN_FS_ERROR Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  6:48   ` Amir Goldstein
2021-10-27  6:48     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 06/10] syscalls/fanotify20: Support submission of debugfs commands Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  6:49   ` Amir Goldstein
2021-10-27  6:49     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 07/10] syscalls/fanotify20: Create a corrupted file Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  6:51   ` Amir Goldstein
2021-10-27  6:51     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 08/10] syscalls/fanotify20: Test event after filesystem abort Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  9:56   ` Amir Goldstein
2021-10-27  9:56     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 09/10] syscalls/fanotify20: Test file event with broken inode Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27  9:57   ` Amir Goldstein
2021-10-27  9:57     ` [LTP] " Amir Goldstein
2021-10-26 18:42 ` [PATCH v2 10/10] syscalls/fanotify20: Test capture of multiple errors Gabriel Krisman Bertazi
2021-10-26 18:42   ` [LTP] " Gabriel Krisman Bertazi
2021-10-27 10:00   ` Amir Goldstein
2021-10-27 10:00     ` [LTP] " Amir Goldstein
2021-10-29 15:03     ` Gabriel Krisman Bertazi
2021-10-29 15:03       ` [LTP] " Gabriel Krisman Bertazi

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=20211026184239.151156-3-krisman@collabora.com \
    --to=krisman@collabora.com \
    --cc=amir73il@gmail.com \
    --cc=jack@suse.com \
    --cc=kernel@collabora.com \
    --cc=khazhy@google.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=ltp@lists.linux.it \
    --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.