Message ID | 20240220123743.7181-1-andrea.cervesato@suse.de |
---|---|
State | Superseded |
Headers | show |
Series | [v1] Add more testcases in mkdir03 | expand |
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, > +};
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.
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 --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, +};