[LTP] [PATCH v1] Add more testcases in mkdir03

Andrea Cervesato andrea.cervesato@suse.de
Tue Feb 20 13:37:43 CET 2024


From: Andrea Cervesato <andrea.cervesato@suse.com>

We add more test cases in mkdir03 in order to check that mkdir()
can't overwrite certain types of files, such as simlinks, directories,
pipes, devices, etc.
These test cases come from symlink01 refactoring.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 runtest/syscalls                           |  2 +-
 testcases/kernel/syscalls/mkdir/.gitignore |  1 +
 testcases/kernel/syscalls/mkdir/mkdir03.c  | 10 ++++
 testcases/kernel/syscalls/mkdir/mkdir10.c  | 57 ++++++++++++++++++++++
 4 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 testcases/kernel/syscalls/mkdir/mkdir10.c

diff --git a/runtest/syscalls b/runtest/syscalls
index ef90076e4..aabc37519 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -757,8 +757,8 @@ mkdir02 mkdir02
 mkdir03 mkdir03
 mkdir04 mkdir04
 mkdir05 mkdir05
-mkdir05A symlink01 -T mkdir05
 mkdir09 mkdir09
+mkdir10 mkdir10
 
 #mkdirat test cases
 mkdirat01 mkdirat01
diff --git a/testcases/kernel/syscalls/mkdir/.gitignore b/testcases/kernel/syscalls/mkdir/.gitignore
index 880ff50c0..416fbbd7c 100644
--- a/testcases/kernel/syscalls/mkdir/.gitignore
+++ b/testcases/kernel/syscalls/mkdir/.gitignore
@@ -3,3 +3,4 @@
 /mkdir04
 /mkdir05
 /mkdir09
+/mkdir10
diff --git a/testcases/kernel/syscalls/mkdir/mkdir03.c b/testcases/kernel/syscalls/mkdir/mkdir03.c
index d5141bb64..42dfdb9f0 100644
--- a/testcases/kernel/syscalls/mkdir/mkdir03.c
+++ b/testcases/kernel/syscalls/mkdir/mkdir03.c
@@ -19,6 +19,9 @@
 #include "tst_test.h"
 
 #define TST_EEXIST	"tst_eexist"
+#define TST_PIPE	"tst_pipe"
+#define TST_FOLDER	"tst_folder"
+#define TST_SYMLINK "tst_symlink"
 #define TST_ENOENT	"tst_enoent/tst"
 #define TST_ENOTDIR_FILE "tst_enotdir"
 #define TST_ENOTDIR_DIR	"tst_enotdir/tst"
@@ -41,6 +44,9 @@ static struct tcase {
 	{NULL, EFAULT},
 	{long_dir, ENAMETOOLONG},
 	{TST_EEXIST, EEXIST},
+	{TST_FOLDER, EEXIST},
+	{TST_PIPE, EEXIST},
+	{TST_SYMLINK, EEXIST},
 	{TST_ENOENT, ENOENT},
 	{TST_ENOTDIR_DIR, ENOTDIR},
 	{loop_dir, ELOOP},
@@ -70,7 +76,11 @@ static void verify_mkdir(unsigned int n)
 static void setup(void)
 {
 	unsigned int i;
+	char *tmpdir = tst_get_tmpdir();
 
+	SAFE_SYMLINK(tmpdir, TST_SYMLINK);
+	SAFE_MKFIFO(TST_PIPE, 0777);
+	SAFE_MKDIR(TST_FOLDER, 0777);
 	SAFE_TOUCH(TST_EEXIST, MODE, NULL);
 	SAFE_TOUCH(TST_ENOTDIR_FILE, MODE, NULL);
 
diff --git a/testcases/kernel/syscalls/mkdir/mkdir10.c b/testcases/kernel/syscalls/mkdir/mkdir10.c
new file mode 100644
index 000000000..87f419916
--- /dev/null
+++ b/testcases/kernel/syscalls/mkdir/mkdir10.c
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+ *    Author: David Fenner
+ *    Copilot: Jon Hendrickson
+ * Copyright (C) 2024 Andrea Cervesato andrea.cervesato@suse.com
+ */
+
+/*\
+ * [Description]
+ *
+ * This test verifies that mkdir() can't overwrite certain generated files, such
+ * as symlinks, pipes, devices, folders, etc.
+ */
+
+#include "tst_test.h"
+
+#define FILE_FOLDER "myfolder"
+#define FILE_MYFILE "myfile"
+#define FILE_FIFO "mypipe"
+#define FILE_SYMLINK "mylink"
+#define FILE_DEVICE "/dev/null"
+
+struct tcase {
+	char *file;
+	char *msg;
+};
+
+static struct tcase tcases[] = {
+	{FILE_FOLDER,	"folder already exists"},
+	{FILE_MYFILE,	"file already exists"},
+	{FILE_FIFO,		"fifo already exists"},
+	{FILE_SYMLINK,	"symlink already exists"},
+	{FILE_DEVICE,	"device already exists"},
+};
+
+static void run(unsigned int i)
+{
+	struct tcase *tc = &tcases[i];
+
+	TST_EXP_FAIL(mkdir(tc->file, 0777), EEXIST, "%s", tc->msg);
+}
+
+static void setup(void)
+{
+	SAFE_SYMLINK(tst_get_tmpdir(), FILE_SYMLINK);
+	SAFE_MKFIFO(FILE_FIFO, 0777);
+	SAFE_MKDIR(FILE_FOLDER, 0777);
+	SAFE_TOUCH(FILE_MYFILE, 0777, NULL);
+}
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tcases),
+	.setup = setup,
+	.needs_tmpdir = 1,
+};
-- 
2.35.3



More information about the ltp mailing list