diff mbox series

[v1] Add more testcases in mkdir03

Message ID 20240220123743.7181-1-andrea.cervesato@suse.de
State Superseded
Headers show
Series [v1] Add more testcases in mkdir03 | expand

Commit Message

Andrea Cervesato Feb. 20, 2024, 12:37 p.m. UTC
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

Comments

Andrea Cervesato Feb. 20, 2024, 12:46 p.m. UTC | #1
Hi!

On 2/20/24 13:37, Andrea Cervesato wrote:
> 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
Please remove the runtest files modifications before merge. It's an 
error due to --amend.
Thanks
>   
>   #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,
> +};
Cyril Hrubis Feb. 21, 2024, 2:49 p.m. UTC | #2
Hi!
>  runtest/syscalls                           |  2 +-
>  testcases/kernel/syscalls/mkdir/.gitignore |  1 +
>  testcases/kernel/syscalls/mkdir/mkdir03.c  | 10 ++++
>  testcases/kernel/syscalls/mkdir/mkdir10.c  | 57 ++++++++++++++++++++++

I guess that the whole mkdir10.c addition is a accidental...

And the mkdir03 misses the "/dev/null" addition, otherwise it looks
good.
Andrea Cervesato Feb. 21, 2024, 2:51 p.m. UTC | #3
Hi!

On 2/21/24 15:49, Cyril Hrubis wrote:
> Hi!
>>   runtest/syscalls                           |  2 +-
>>   testcases/kernel/syscalls/mkdir/.gitignore |  1 +
>>   testcases/kernel/syscalls/mkdir/mkdir03.c  | 10 ++++
>>   testcases/kernel/syscalls/mkdir/mkdir10.c  | 57 ++++++++++++++++++++++
> I guess that the whole mkdir10.c addition is a accidental...
Quite accidental...
> And the mkdir03 misses the "/dev/null" addition, otherwise it looks
> good.
>
Andrea
diff mbox series

Patch

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,
+};