* [LTP] [PATCH v4 0/2] Fix unlink09 test
@ 2024-07-02 7:38 Andrea Cervesato
2024-07-02 7:38 ` [LTP] [PATCH v4 1/2] " Andrea Cervesato
2024-07-02 7:38 ` [LTP] [PATCH v4 2/2] Add unlink10 test Andrea Cervesato
0 siblings, 2 replies; 6+ messages in thread
From: Andrea Cervesato @ 2024-07-02 7:38 UTC (permalink / raw)
To: ltp
This will fix the 2cf78f47a6 and resolve issues on filesystems
which are not supporting inode attributes. Split unlink09 read-only
check and move it into unlink10.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Changes in v4:
- added exfat and fuse to .skip_filesystems
- Link to v3: https://lore.kernel.org/r/20240606-unlink09-v3-0-37cc612ce0fd@suse.com
Changes in v3:
- added .mount_device = 1
- added .skip_filesystems (vfat and ntfs)
- skip test execution when the tmpfs is used on kernel<6.0
- Link to v2: https://lore.kernel.org/r/20240605-unlink09-v2-0-bfa0bbdc8753@suse.com
Changes in v2:
- moved read-only FS check out of unlink09 and created unlink10
- check when FS doesn't support inode attributes and print a TBROK
- simplified inode attributes setup by adding a common function
- added .all_filesystems support
- Link to v1: https://lore.kernel.org/r/20240604-unlink09-v1-1-dfd8e3e1cb2b@suse.com
---
Andrea Cervesato (2):
Fix unlink09 test
Add unlink10 test
runtest/syscalls | 1 +
testcases/kernel/syscalls/unlink/.gitignore | 1 +
testcases/kernel/syscalls/unlink/unlink09.c | 108 ++++++++++++++++------------
testcases/kernel/syscalls/unlink/unlink10.c | 33 +++++++++
4 files changed, 99 insertions(+), 44 deletions(-)
---
base-commit: 072f359ac54395af1d5ade4ca8cc347c5afe6310
change-id: 20240604-unlink09-dc4802f872f9
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 6+ messages in thread* [LTP] [PATCH v4 1/2] Fix unlink09 test 2024-07-02 7:38 [LTP] [PATCH v4 0/2] Fix unlink09 test Andrea Cervesato @ 2024-07-02 7:38 ` Andrea Cervesato 2024-07-02 13:57 ` Cyril Hrubis 2024-07-02 7:38 ` [LTP] [PATCH v4 2/2] Add unlink10 test Andrea Cervesato 1 sibling, 1 reply; 6+ messages in thread From: Andrea Cervesato @ 2024-07-02 7:38 UTC (permalink / raw) To: ltp From: Andrea Cervesato <andrea.cervesato@suse.com> This patch will fix unlink09 test by checking for filesystems which are not supporting inode attributes. At the same time, it removes the read-only filesystem unlink() check in order to add .all_filesystems support. Fixes: 2cf78f47a6 (unlink: Add error tests for EPERM and EROFS) Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com> --- testcases/kernel/syscalls/unlink/unlink09.c | 108 ++++++++++++++++------------ 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/testcases/kernel/syscalls/unlink/unlink09.c b/testcases/kernel/syscalls/unlink/unlink09.c index cc4b4a07e..5e438569f 100644 --- a/testcases/kernel/syscalls/unlink/unlink09.c +++ b/testcases/kernel/syscalls/unlink/unlink09.c @@ -2,92 +2,103 @@ /* * Copyright (c) 2024 FUJITSU LIMITED. All Rights Reserved. * Author: Yang Xu <xuyang2018.jy@fujitsu.com> + * Copyright (C) 2024 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com> */ /*\ * [Description] * - * Verify that unlink(2) fails with - * - * - EPERM when target file is marked as immutable or append-only - * - EROFS when target file is on a read-only filesystem. + * Verify that unlink(2) fails with EPERM when target file is marked as + * immutable or append-only. */ #include <sys/ioctl.h> #include "tst_test.h" #include "lapi/fs.h" -#define TEST_EPERM_IMMUTABLE "test_eperm_immutable" -#define TEST_EPERM_APPEND_ONLY "test_eperm_append_only" -#define DIR_EROFS "erofs" -#define TEST_EROFS "erofs/test_erofs" +#define MNTPOINT "mnt" +#define TEST_EPERM_IMMUTABLE MNTPOINT"/test_eperm_immutable" +#define TEST_EPERM_APPEND_ONLY MNTPOINT"/test_eperm_append_only" -static int fd_immutable; -static int fd_append_only; +static int fd_immutable = -1; +static int fd_append_only = -1; static struct test_case_t { char *filename; int *fd; int flag; - int expected_errno; char *desc; } tcases[] = { - {TEST_EPERM_IMMUTABLE, &fd_immutable, FS_IMMUTABLE_FL, EPERM, + {TEST_EPERM_IMMUTABLE, &fd_immutable, FS_IMMUTABLE_FL, "target file is immutable"}, - {TEST_EPERM_APPEND_ONLY, &fd_append_only, FS_APPEND_FL, EPERM, + {TEST_EPERM_APPEND_ONLY, &fd_append_only, FS_APPEND_FL, "target file is append-only"}, - {TEST_EROFS, NULL, 0, EROFS, "target file in read-only filesystem"}, }; +static void setup_inode_flag(const int fd, const int flag, const int reset) +{ + int attr; + + SAFE_IOCTL(fd, FS_IOC_GETFLAGS, &attr); + + if (reset) + attr &= ~flag; + else + attr |= flag; + + SAFE_IOCTL(fd, FS_IOC_SETFLAGS, &attr); +} + static void setup(void) { int attr; - fd_immutable = SAFE_OPEN(TEST_EPERM_IMMUTABLE, O_CREAT, 0600); - SAFE_IOCTL(fd_immutable, FS_IOC_GETFLAGS, &attr); + /* inode attributes in tmpfs are supported from kernel 6.0 + * https://lore.kernel.org/all/20220715015912.2560575-1-tytso@mit.edu/ + */ + if (!strcmp(tst_device->fs_type, "tmpfs") && tst_kvercmp(6, 0, 0) < 0) + tst_brk(TCONF, "FS_IOC_GETFLAGS on tmpfs not supported for kernel<6.0"); + + fd_immutable = SAFE_CREAT(TEST_EPERM_IMMUTABLE, 0600); + TEST(ioctl(fd_immutable, FS_IOC_GETFLAGS, &attr)); + + if (TST_RET == -1 && TST_ERR == ENOTTY) { + SAFE_CLOSE(fd_immutable); + + tst_brk(TBROK, "Inode attributes not supported by '%s'", + tst_device->fs_type); + } + attr |= FS_IMMUTABLE_FL; SAFE_IOCTL(fd_immutable, FS_IOC_SETFLAGS, &attr); - fd_append_only = SAFE_OPEN(TEST_EPERM_APPEND_ONLY, O_CREAT, 0600); - SAFE_IOCTL(fd_append_only, FS_IOC_GETFLAGS, &attr); - attr |= FS_APPEND_FL; - SAFE_IOCTL(fd_append_only, FS_IOC_SETFLAGS, &attr); + fd_append_only = SAFE_CREAT(TEST_EPERM_APPEND_ONLY, 0600); + setup_inode_flag(fd_append_only, FS_APPEND_FL, 0); } static void cleanup(void) { - int attr; - - SAFE_IOCTL(fd_immutable, FS_IOC_GETFLAGS, &attr); - attr &= ~FS_IMMUTABLE_FL; - SAFE_IOCTL(fd_immutable, FS_IOC_SETFLAGS, &attr); - SAFE_CLOSE(fd_immutable); + if (fd_immutable != -1) { + setup_inode_flag(fd_immutable, FS_IMMUTABLE_FL, 1); + SAFE_CLOSE(fd_immutable); + } - SAFE_IOCTL(fd_append_only, FS_IOC_GETFLAGS, &attr); - attr &= ~FS_APPEND_FL; - SAFE_IOCTL(fd_append_only, FS_IOC_SETFLAGS, &attr); - SAFE_CLOSE(fd_append_only); + if (fd_append_only != -1) { + setup_inode_flag(fd_append_only, FS_APPEND_FL, 1); + SAFE_CLOSE(fd_append_only); + } } static void verify_unlink(unsigned int i) { struct test_case_t *tc = &tcases[i]; - int attr; - TST_EXP_FAIL(unlink(tc->filename), tc->expected_errno, "%s", tc->desc); + TST_EXP_FAIL(unlink(tc->filename), EPERM, "%s", tc->desc); /* If unlink() succeeded unexpectedly, test file should be restored. */ if (!TST_RET) { - if (tc->fd) { - *(tc->fd) = SAFE_OPEN(tc->filename, O_CREAT, 0600); - if (tc->flag) { - SAFE_IOCTL(*(tc->fd), FS_IOC_GETFLAGS, &attr); - attr |= tc->flag; - SAFE_IOCTL(*(tc->fd), FS_IOC_SETFLAGS, &attr); - } - } else { - SAFE_TOUCH(tc->filename, 0600, 0); - } + *(tc->fd) = SAFE_CREAT(tc->filename, 0600); + setup_inode_flag(*(tc->fd), tc->flag, 0); } } @@ -96,7 +107,16 @@ static struct tst_test test = { .tcnt = ARRAY_SIZE(tcases), .cleanup = cleanup, .test = verify_unlink, - .needs_rofs = 1, - .mntpoint = DIR_EROFS, + .mntpoint = MNTPOINT, .needs_root = 1, + .format_device = 1, + .mount_device = 1, + .all_filesystems = 1, + .skip_filesystems = (const char *const[]) { + "fuse", + "exfat", + "vfat", + "ntfs", + NULL + }, }; -- 2.43.0 -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH v4 1/2] Fix unlink09 test 2024-07-02 7:38 ` [LTP] [PATCH v4 1/2] " Andrea Cervesato @ 2024-07-02 13:57 ` Cyril Hrubis 2024-07-02 14:02 ` Andrea Cervesato via ltp 0 siblings, 1 reply; 6+ messages in thread From: Cyril Hrubis @ 2024-07-02 13:57 UTC (permalink / raw) To: Andrea Cervesato; +Cc: ltp Hi! > +static void setup_inode_flag(const int fd, const int flag, const int reset) I find it a bit strange when we pass reset flag, since I would expect that if we pass non-zero to this function the flag would be set not reset. If you are find with it I will change the reset flag in to set flag and reverse the logic before pushing the changes... > +{ > + int attr; > + > + SAFE_IOCTL(fd, FS_IOC_GETFLAGS, &attr); > + > + if (reset) > + attr &= ~flag; > + else > + attr |= flag; > + > + SAFE_IOCTL(fd, FS_IOC_SETFLAGS, &attr); > +} -- Cyril Hrubis chrubis@suse.cz -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH v4 1/2] Fix unlink09 test 2024-07-02 13:57 ` Cyril Hrubis @ 2024-07-02 14:02 ` Andrea Cervesato via ltp 2024-07-02 14:18 ` Cyril Hrubis 0 siblings, 1 reply; 6+ messages in thread From: Andrea Cervesato via ltp @ 2024-07-02 14:02 UTC (permalink / raw) To: Cyril Hrubis, Andrea Cervesato; +Cc: ltp Hi, feel free to add the modification. On 7/2/24 15:57, Cyril Hrubis wrote: > Hi! >> +static void setup_inode_flag(const int fd, const int flag, const int reset) > I find it a bit strange when we pass reset flag, since I would expect > that if we pass non-zero to this function the flag would be set not > reset. > > If you are find with it I will change the reset flag in to set flag and > reverse the logic before pushing the changes... > >> +{ >> + int attr; >> + >> + SAFE_IOCTL(fd, FS_IOC_GETFLAGS, &attr); >> + >> + if (reset) >> + attr &= ~flag; >> + else >> + attr |= flag; >> + >> + SAFE_IOCTL(fd, FS_IOC_SETFLAGS, &attr); >> +} Andrea -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH v4 1/2] Fix unlink09 test 2024-07-02 14:02 ` Andrea Cervesato via ltp @ 2024-07-02 14:18 ` Cyril Hrubis 0 siblings, 0 replies; 6+ messages in thread From: Cyril Hrubis @ 2024-07-02 14:18 UTC (permalink / raw) To: Andrea Cervesato; +Cc: ltp Hi! Pushed, thanks. -- Cyril Hrubis chrubis@suse.cz -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply [flat|nested] 6+ messages in thread
* [LTP] [PATCH v4 2/2] Add unlink10 test 2024-07-02 7:38 [LTP] [PATCH v4 0/2] Fix unlink09 test Andrea Cervesato 2024-07-02 7:38 ` [LTP] [PATCH v4 1/2] " Andrea Cervesato @ 2024-07-02 7:38 ` Andrea Cervesato 1 sibling, 0 replies; 6+ messages in thread From: Andrea Cervesato @ 2024-07-02 7:38 UTC (permalink / raw) To: ltp From: Andrea Cervesato <andrea.cervesato@suse.com> This test verifies that unlink(2) fails with EROFS when target file is on a read-only filesystem. Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com> --- runtest/syscalls | 1 + testcases/kernel/syscalls/unlink/.gitignore | 1 + testcases/kernel/syscalls/unlink/unlink10.c | 33 +++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/runtest/syscalls b/runtest/syscalls index 44a577db3..b6cadb2df 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -1658,6 +1658,7 @@ unlink05 unlink05 unlink07 unlink07 unlink08 unlink08 unlink09 unlink09 +unlink10 unlink10 #unlinkat test cases unlinkat01 unlinkat01 diff --git a/testcases/kernel/syscalls/unlink/.gitignore b/testcases/kernel/syscalls/unlink/.gitignore index 6038cc29d..4fc24059a 100644 --- a/testcases/kernel/syscalls/unlink/.gitignore +++ b/testcases/kernel/syscalls/unlink/.gitignore @@ -2,3 +2,4 @@ /unlink07 /unlink08 /unlink09 +/unlink10 diff --git a/testcases/kernel/syscalls/unlink/unlink10.c b/testcases/kernel/syscalls/unlink/unlink10.c new file mode 100644 index 000000000..861f24a50 --- /dev/null +++ b/testcases/kernel/syscalls/unlink/unlink10.c @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2024 FUJITSU LIMITED. All Rights Reserved. + * Author: Yang Xu <xuyang2018.jy@fujitsu.com> + * Copyright (C) 2024 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com> + */ + +/*\ + * [Description] + * + * Verify that unlink(2) fails with EROFS when target file is on a read-only + * filesystem. + */ + +#include <sys/ioctl.h> +#include "tst_test.h" +#include "lapi/fs.h" + +#define MNTPOINT "erofs" +#define FILENAME MNTPOINT"/file" + +static void run(void) +{ + TST_EXP_FAIL(unlink(FILENAME), EROFS, + "%s", "target file in read-only filesystem"); +} + +static struct tst_test test = { + .test_all = run, + .needs_rofs = 1, + .needs_root = 1, + .mntpoint = MNTPOINT, +}; -- 2.43.0 -- Mailing list info: https://lists.linux.it/listinfo/ltp ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-07-02 14:18 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-02 7:38 [LTP] [PATCH v4 0/2] Fix unlink09 test Andrea Cervesato 2024-07-02 7:38 ` [LTP] [PATCH v4 1/2] " Andrea Cervesato 2024-07-02 13:57 ` Cyril Hrubis 2024-07-02 14:02 ` Andrea Cervesato via ltp 2024-07-02 14:18 ` Cyril Hrubis 2024-07-02 7:38 ` [LTP] [PATCH v4 2/2] Add unlink10 test Andrea Cervesato
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox