From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH 3/7] syscalls/fanotify20: Validate incoming FID in FAN_FS_ERROR
Date: Mon, 2 Aug 2021 17:46:41 -0400 [thread overview]
Message-ID: <20210802214645.2633028-4-krisman@collabora.com> (raw)
In-Reply-To: <20210802214645.2633028-1-krisman@collabora.com>
Verify the FID provided in the event. If the testcase has a null inode,
this is assumed to be a superblock error (i.e. null FH).
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
---
.../kernel/syscalls/fanotify/fanotify20.c | 51 +++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/testcases/kernel/syscalls/fanotify/fanotify20.c b/testcases/kernel/syscalls/fanotify/fanotify20.c
index fd5cfb8744f1..d8d788ae685f 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify20.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify20.c
@@ -40,6 +40,14 @@
#define FAN_EVENT_INFO_TYPE_ERROR 4
+#ifndef FILEID_INVALID
+#define FILEID_INVALID 0xff
+#endif
+
+#ifndef FILEID_INO32_GEN
+#define FILEID_INO32_GEN 1
+#endif
+
struct fanotify_event_info_error {
struct fanotify_event_info_header hdr;
__s32 error;
@@ -57,6 +65,9 @@ static const struct test_case {
char *name;
int error;
unsigned int error_count;
+
+ /* inode can be null for superblock errors */
+ unsigned int *inode;
void (*trigger_error)(void);
void (*prepare_fs)(void);
} testcases[] = {
@@ -83,6 +94,42 @@ struct fanotify_event_info_header *get_event_info(
((struct fanotify_event_info_error *) \
get_event_info((event), FAN_EVENT_INFO_TYPE_ERROR))
+#define get_event_info_fid(event) \
+ ((struct fanotify_event_info_fid *) \
+ get_event_info((event), FAN_EVENT_INFO_TYPE_FID))
+
+int check_error_event_info_fid(struct fanotify_event_info_fid *fid,
+ const struct test_case *ex)
+{
+ int fail = 0;
+ struct file_handle *fh = (struct file_handle *) &fid->handle;
+
+ if (!ex->inode) {
+ uint32_t *h = (uint32_t *) fh->f_handle;
+
+ if (!(fh->handle_type == FILEID_INVALID && !h[0] && !h[1])) {
+ tst_res(TFAIL, "%s: file handle should have been invalid",
+ ex->name);
+ fail++;
+ }
+ return fail;
+ } else if (fh->handle_type == FILEID_INO32_GEN) {
+ uint32_t *h = (uint32_t *) fh->f_handle;
+
+ if (h[0] != *ex->inode) {
+ tst_res(TFAIL,
+ "%s: Unexpected file handle inode (%u!=%u)",
+ ex->name, *ex->inode, h[0]);
+ fail++;
+ }
+ } else {
+ tst_res(TFAIL, "%s: Test can't handle received FH type (%d)",
+ ex->name, fh->handle_type);
+ }
+
+ return fail;
+}
+
int check_error_event_info_error(struct fanotify_event_info_error *info_error,
const struct test_case *ex)
{
@@ -126,6 +173,7 @@ void check_event(char *buf, size_t len, const struct test_case *ex)
struct fanotify_event_metadata *event =
(struct fanotify_event_metadata *) buf;
struct fanotify_event_info_error *info_error;
+ struct fanotify_event_info_fid *info_fid;
int fail = 0;
if (len < FAN_EVENT_METADATA_LEN)
@@ -137,6 +185,9 @@ void check_event(char *buf, size_t len, const struct test_case *ex)
info_error = get_event_info_error(event);
fail += info_error ? check_error_event_info_error(info_error, ex) : 1;
+ info_fid = get_event_info_fid(event);
+ fail += info_fid ? check_error_event_info_fid(info_fid, ex) : 1;
+
if (!fail)
tst_res(TPASS, "Successfully received: %s", ex->name);
}
--
2.32.0
next prev parent reply other threads:[~2021-08-02 21:46 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-02 21:46 [LTP] [PATCH 0/7] Test the new fanotify FAN_FS_ERROR event Gabriel Krisman Bertazi
2021-08-02 21:46 ` [LTP] [PATCH 1/7] syscalls/fanotify20: Introduce helpers for FAN_FS_ERROR test Gabriel Krisman Bertazi
2021-08-03 8:30 ` Amir Goldstein
2021-08-02 21:46 ` [LTP] [PATCH 2/7] syscalls/fanotify20: Validate the generic error info Gabriel Krisman Bertazi
2021-08-03 8:42 ` Amir Goldstein
2021-08-02 21:46 ` Gabriel Krisman Bertazi [this message]
2021-08-03 8:56 ` [LTP] [PATCH 3/7] syscalls/fanotify20: Validate incoming FID in FAN_FS_ERROR Amir Goldstein
2021-08-04 4:54 ` Gabriel Krisman Bertazi
2021-08-04 5:39 ` Amir Goldstein
2021-08-04 7:40 ` Matthew Bobrowski
2021-08-20 10:21 ` Petr Vorel
2021-08-20 21:58 ` Matthew Bobrowski
2021-08-23 9:35 ` Jan Kara
2021-08-23 11:19 ` Matthew Bobrowski
2021-08-23 14:34 ` Gabriel Krisman Bertazi
2021-08-02 21:46 ` [LTP] [PATCH 4/7] syscalls/fanotify20: Watch event after filesystem abort Gabriel Krisman Bertazi
2021-08-02 21:46 ` [LTP] [PATCH 5/7] syscalls/fanotify20: Support submission of debugfs commands Gabriel Krisman Bertazi
2021-08-02 21:46 ` [LTP] [PATCH 6/7] syscalls/fanotify20: Test file event with broken inode Gabriel Krisman Bertazi
2021-08-03 9:04 ` Amir Goldstein
2021-08-03 9:08 ` Amir Goldstein
2021-08-04 4:52 ` Gabriel Krisman Bertazi
2021-08-04 5:27 ` Amir Goldstein
2021-08-05 21:50 ` Gabriel Krisman Bertazi
2021-08-02 21:46 ` [LTP] [PATCH 7/7] syscalls/fanotify20: Test capture of multiple errors 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=20210802214645.2633028-4-krisman@collabora.com \
--to=krisman@collabora.com \
--cc=ltp@lists.linux.it \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox