Message ID | 20240524085617.32303-1-wegao@suse.com |
---|---|
State | Superseded |
Headers | show |
Series | [v2] chmod08.c: Block mode changes of symlinks | expand |
Hi Wei, there's already a patch doing that. I wrote it long time ago, but it's pending for review. Please take a look if you are interested: https://patchwork.ozlabs.org/project/ltp/patch/20240220131319.11761-1-andrea.cervesato@suse.de/ Andrea On 5/24/24 10:56, Wei Gao via ltp wrote: > Signed-off-by: Wei Gao <wegao@suse.com> > --- > runtest/syscalls | 1 + > testcases/kernel/syscalls/chmod/.gitignore | 1 + > testcases/kernel/syscalls/chmod/chmod08.c | 67 ++++++++++++++++++++++ > 3 files changed, 69 insertions(+) > create mode 100644 testcases/kernel/syscalls/chmod/chmod08.c > > diff --git a/runtest/syscalls b/runtest/syscalls > index fe9ad0895..5754d8195 100644 > --- a/runtest/syscalls > +++ b/runtest/syscalls > @@ -70,6 +70,7 @@ chmod03 chmod03 > chmod05 chmod05 > chmod06 chmod06 > chmod07 chmod07 > +chmod08 chmod08 > > chown01 chown01 > chown01_16 chown01_16 > diff --git a/testcases/kernel/syscalls/chmod/.gitignore b/testcases/kernel/syscalls/chmod/.gitignore > index 27ddfce16..f295f4dcb 100644 > --- a/testcases/kernel/syscalls/chmod/.gitignore > +++ b/testcases/kernel/syscalls/chmod/.gitignore > @@ -3,3 +3,4 @@ > /chmod05 > /chmod06 > /chmod07 > +/chmod08 > diff --git a/testcases/kernel/syscalls/chmod/chmod08.c b/testcases/kernel/syscalls/chmod/chmod08.c > new file mode 100644 > index 000000000..368a1d635 > --- /dev/null > +++ b/testcases/kernel/syscalls/chmod/chmod08.c > @@ -0,0 +1,67 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Copyright (c) 2024 Wei Gao <wegao@suse.com> > + */ > + > +/*\ > + * [Description] > + * > + * Test for kernel commit > + * 5d1f903f75a8 ("attr: block mode changes of symlinks") > + */ > + > +#include "lapi/fcntl.h" > +#include "tst_test.h" > + > +#define MODE 0644 > +#define TESTFILE "testfile" > +#define TESTFILE_SYMLINK "testfile_symlink" > + > +static void run(void) > +{ > + struct stat stat_file, stat_sym; > + int mode = 0; > + char fd_path[100]; > + > + int fd = SAFE_OPEN(TESTFILE_SYMLINK, O_PATH | O_NOFOLLOW); > + > + sprintf(fd_path, "/proc/self/fd/%d", fd); > + > + TST_EXP_FAIL(chmod(fd_path, mode), ENOTSUP, "chmod(%s, %04o)", > + TESTFILE_SYMLINK, mode); > + > + SAFE_STAT(TESTFILE, &stat_file); > + SAFE_LSTAT(TESTFILE_SYMLINK, &stat_sym); > + > + stat_file.st_mode &= ~S_IFREG; > + stat_sym.st_mode &= ~S_IFLNK; > + > + TST_EXP_EXPR(stat_file.st_mode != (unsigned int)mode, > + "stat(%s) mode=%04o", TESTFILE, stat_file.st_mode); > + > + TST_EXP_EXPR(stat_sym.st_mode != (unsigned int)mode, > + "stat(%s) mode=%04o", TESTFILE, stat_sym.st_mode); > + > + SAFE_CLOSE(fd); > +} > + > +static void setup(void) > +{ > + SAFE_TOUCH(TESTFILE, MODE, NULL); > + SAFE_SYMLINK(TESTFILE, TESTFILE_SYMLINK); > +} > + > +static void cleanup(void) > +{ > + remove(TESTFILE); > + remove(TESTFILE_SYMLINK); > +} > + > +static struct tst_test test = { > + .setup = setup, > + .cleanup = cleanup, > + .test_all = run, > + .min_kver = "6.6", > + .mntpoint = "mntpoint", > + .all_filesystems = 1 > +};
Hi! > there's already a patch doing that. I wrote it long time ago, but it's > pending for review. Please take a look if you are interested: > https://patchwork.ozlabs.org/project/ltp/patch/20240220131319.11761-1-andrea.cervesato@suse.de/ This is a different test though, it checks that we can't change mode for the file via the /proc/self/fd/fd* symlinks.
diff --git a/runtest/syscalls b/runtest/syscalls index fe9ad0895..5754d8195 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -70,6 +70,7 @@ chmod03 chmod03 chmod05 chmod05 chmod06 chmod06 chmod07 chmod07 +chmod08 chmod08 chown01 chown01 chown01_16 chown01_16 diff --git a/testcases/kernel/syscalls/chmod/.gitignore b/testcases/kernel/syscalls/chmod/.gitignore index 27ddfce16..f295f4dcb 100644 --- a/testcases/kernel/syscalls/chmod/.gitignore +++ b/testcases/kernel/syscalls/chmod/.gitignore @@ -3,3 +3,4 @@ /chmod05 /chmod06 /chmod07 +/chmod08 diff --git a/testcases/kernel/syscalls/chmod/chmod08.c b/testcases/kernel/syscalls/chmod/chmod08.c new file mode 100644 index 000000000..368a1d635 --- /dev/null +++ b/testcases/kernel/syscalls/chmod/chmod08.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2024 Wei Gao <wegao@suse.com> + */ + +/*\ + * [Description] + * + * Test for kernel commit + * 5d1f903f75a8 ("attr: block mode changes of symlinks") + */ + +#include "lapi/fcntl.h" +#include "tst_test.h" + +#define MODE 0644 +#define TESTFILE "testfile" +#define TESTFILE_SYMLINK "testfile_symlink" + +static void run(void) +{ + struct stat stat_file, stat_sym; + int mode = 0; + char fd_path[100]; + + int fd = SAFE_OPEN(TESTFILE_SYMLINK, O_PATH | O_NOFOLLOW); + + sprintf(fd_path, "/proc/self/fd/%d", fd); + + TST_EXP_FAIL(chmod(fd_path, mode), ENOTSUP, "chmod(%s, %04o)", + TESTFILE_SYMLINK, mode); + + SAFE_STAT(TESTFILE, &stat_file); + SAFE_LSTAT(TESTFILE_SYMLINK, &stat_sym); + + stat_file.st_mode &= ~S_IFREG; + stat_sym.st_mode &= ~S_IFLNK; + + TST_EXP_EXPR(stat_file.st_mode != (unsigned int)mode, + "stat(%s) mode=%04o", TESTFILE, stat_file.st_mode); + + TST_EXP_EXPR(stat_sym.st_mode != (unsigned int)mode, + "stat(%s) mode=%04o", TESTFILE, stat_sym.st_mode); + + SAFE_CLOSE(fd); +} + +static void setup(void) +{ + SAFE_TOUCH(TESTFILE, MODE, NULL); + SAFE_SYMLINK(TESTFILE, TESTFILE_SYMLINK); +} + +static void cleanup(void) +{ + remove(TESTFILE); + remove(TESTFILE_SYMLINK); +} + +static struct tst_test test = { + .setup = setup, + .cleanup = cleanup, + .test_all = run, + .min_kver = "6.6", + .mntpoint = "mntpoint", + .all_filesystems = 1 +};
Signed-off-by: Wei Gao <wegao@suse.com> --- runtest/syscalls | 1 + testcases/kernel/syscalls/chmod/.gitignore | 1 + testcases/kernel/syscalls/chmod/chmod08.c | 67 ++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 testcases/kernel/syscalls/chmod/chmod08.c