Thread (24 messages) flat view 24 messages, 5 authors, 2021-08-23

Re: [PATCH 2/7] syscalls/fanotify20: Validate the generic error info

From: Amir Goldstein <amir73il@gmail.com>
Date: 2021-08-03 08:42:30
Also in: ltp

On Tue, Aug 3, 2021 at 12:47 AM Gabriel Krisman Bertazi
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
Implement some validation for the generic error info record emitted by
the kernel.  The error number is fs-specific but, well, we only support
ext4 for now anyway.

Signed-off-by: Gabriel Krisman Bertazi <redacted>
---
 .../kernel/syscalls/fanotify/fanotify20.c     | 59 ++++++++++++++++++-
 1 file changed, 58 insertions(+), 1 deletion(-)
diff --git a/testcases/kernel/syscalls/fanotify/fanotify20.c b/testcases/kernel/syscalls/fanotify/fanotify20.c
index 50531bd99cc9..fd5cfb8744f1 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify20.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify20.c
@@ -37,6 +37,14 @@

 #ifndef FAN_FS_ERROR
 #define FAN_FS_ERROR           0x00008000
+
+#define FAN_EVENT_INFO_TYPE_ERROR      4
+
+struct fanotify_event_info_error {
+       struct fanotify_event_info_header hdr;
+       __s32 error;
+       __u32 error_count;
+};
 #endif
Those defines go in fanotify.h
quoted hunk ↗ jump to hunk
 #define BUF_SIZE 256
@@ -47,11 +55,54 @@ int fd_notify;

 static const struct test_case {
        char *name;
+       int error;
+       unsigned int error_count;
        void (*trigger_error)(void);
        void (*prepare_fs)(void);
 } testcases[] = {
 };

+struct fanotify_event_info_header *get_event_info(
+                                       struct fanotify_event_metadata *event,
+                                       int info_type)
+{
+       struct fanotify_event_info_header *hdr = NULL;
+       char *start = (char *) event;
+       int off;
+
+       for (off = event->metadata_len; (off+sizeof(*hdr)) < event->event_len;
+            off += hdr->len) {
+               hdr = (struct fanotify_event_info_header *) &(start[off]);
+               if (hdr->info_type == info_type)
+                       return hdr;
+       }
+       return NULL;
+}
+
+#define get_event_info_error(event)                                    \
+       ((struct fanotify_event_info_error *)                           \
+        get_event_info((event), FAN_EVENT_INFO_TYPE_ERROR))
This helper and macro would be very useful in fanotify.h for other tests to use.

Thanks,
Amir.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help