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