* [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 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.