syscalls/fanotify13: add test coverage for fsid cache bug
PATCH 1/1 syscalls/fanotify13: add test coverage for fsid cache bug
This bug was reported by syzbot:
https://lore.kernel.org/linux-fsdevel/CAOQ4uxhsnOXXVCuOT4p4c_koBMFfprWwdtCPGNGhzprFaJZwRA@mail.gmail.com/T/#t
And fixed by kernel commitc285a2f01d69 ("fanotify: update connector fsid cache on add mark")
Signed-off-by Amir Goldstein <[email protected]>
---
Cyril,
Here is a re-send of the patch you missed.
I also added the kernel fix commit for reference.
Thanks,
Amir.
.../kernel/syscalls/fanotify/fanotify13.c | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)
testcases/kernel/syscalls/fanotify/fanotify13.c +16 -4
@@ -85,6 +85,7 @@ static struct test_case_t { } }; +static int nofid_fd;static int fanotify_fd;static char events_buf[BUF_SIZE ];static struct event_t event_set[EVENT_MAX ];
@@ -281,21 +282,32 @@ out:static void do_setup (void ) { -int fd; -/* Check for kernel fanotify support */ - fd =SAFE_FANOTIFY_INIT (FAN_CLASS_NOTIF ,O_RDONLY ); -SAFE_CLOSE (fd); + nofid_fd =SAFE_FANOTIFY_INIT (FAN_CLASS_NOTIF ,O_RDONLY );/* Create file and directory objects for testing */ create_objects (); +/* +* Create a mark on first inode without FAN_REPORT_FID, to test +* uninitialized connector->fsid cache. This mark remains for all test +* cases and is not expected to get any events (no writes in this test). +*/ +if (fanotify_mark (nofid_fd,FAN_MARK_ADD ,FAN_CLOSE_WRITE ,AT_FDCWD , +FILE_PATH_ONE ) ==-1 ) { +tst_brk (TBROK |TERRNO , +"fanotify_mark(%d, FAN_MARK_ADD, FAN_CLOSE_WRITE, " +"AT_FDCWD, " FILE_PATH_ONE ") failed" , + nofid_fd); + } +/* Get the filesystem fsid and file handle for each created object */ get_object_stats (); }static void do_cleanup (void ) { +SAFE_CLOSE (nofid_fd);if (fanotify_fd >0 )SAFE_CLOSE (fanotify_fd); }
Signature · 1 line
2.17.1