Message ID | 1660555627-2269-1-git-send-email-xuyang2018.jy@fujitsu.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [v3,1/2] syscalls/creat09: Add umask test condition | expand |
On Mon, Aug 15, 2022 at 05:27:06PM +0800, Yang Xu wrote: > A kernel patch set that fix setgid strip logic under umask(S_IXGRP) found by > this case has been merged into 6.0-rc1 kernel[1]. > > I will add acl and umask test[2] in xfstests because there is more suitable > to do this. I just realized that before I added the idmapped mounts testsuite into xfstests which tests setgid inheritance in ~April 2021 tests like this didn't exist in LTP apparently as well. Interesting. I was wondering why setgid inheritance bugs hadn't been caught by it. :) Great to expand them! > > Here I just only add umask test condition simply. > > [1]https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1639a49c > [2]https://patchwork.kernel.org/project/fstests/list/?series=662984 > > Reviewed-by: Petr Vorel <pvorel@suse.cz> > Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com> > --- Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org> > testcases/kernel/syscalls/creat/creat09.c | 30 +++++++++++++++++++++-- > 1 file changed, 28 insertions(+), 2 deletions(-) > > diff --git a/testcases/kernel/syscalls/creat/creat09.c b/testcases/kernel/syscalls/creat/creat09.c > index bed7bddb0..d583cceca 100644 > --- a/testcases/kernel/syscalls/creat/creat09.c > +++ b/testcases/kernel/syscalls/creat/creat09.c > @@ -28,6 +28,16 @@ > * Date: Fri Jan 22 16:48:18 2021 -0800 > * > * xfs: fix up non-directory creation in SGID directories > + * > + * When use acl or umask, it still has bug. > + * > + * Fixed in: > + * > + * commit 1639a49ccdce58ea248841ed9b23babcce6dbb0b > + * Author: Yang Xu <xuyang2018.jy@fujitsu.com> > + * Date: Thu July 14 14:11:27 2022 +0800 > + * > + * fs: move S_ISGID stripping into the vfs_*() helpers > */ > > #include <stdlib.h> > @@ -47,6 +57,14 @@ > static gid_t free_gid; > static int fd = -1; > > +static struct tcase { > + const char *msg; > + int mask; > +} tcases[] = { > + {"under umask(0) situation", 0}, > + {"under umask(S_IXGRP) situation", S_IXGRP} > +}; > + > static void setup(void) > { > struct stat buf; > @@ -94,8 +112,14 @@ static void file_test(const char *name) > tst_res(TPASS, "%s: Setgid bit not set", name); > } > > -static void run(void) > +static void run(unsigned int n) > { > + struct tcase *tc = &tcases[n]; > + > + umask(tc->mask); > + tst_res(TINFO, "Testing setgid behaviour when creating file %s", > + tc->msg); > + > fd = SAFE_CREAT(CREAT_FILE, MODE_SGID); > SAFE_CLOSE(fd); > file_test(CREAT_FILE); > @@ -115,13 +139,14 @@ static void cleanup(void) > } > > static struct tst_test test = { > - .test_all = run, > + .test = run, > .setup = setup, > .cleanup = cleanup, > .needs_root = 1, > .all_filesystems = 1, > .mount_device = 1, > .mntpoint = MNTPOINT, > + .tcnt = ARRAY_SIZE(tcases), > .skip_filesystems = (const char*[]) { > "exfat", > "ntfs", > @@ -132,6 +157,7 @@ static struct tst_test test = { > {"linux-git", "0fa3ecd87848"}, > {"CVE", "2018-13405"}, > {"linux-git", "01ea173e103e"}, > + {"linux-git", "1639a49ccdce"}, > {} > }, > }; > -- > 2.23.0 >
diff --git a/testcases/kernel/syscalls/creat/creat09.c b/testcases/kernel/syscalls/creat/creat09.c index bed7bddb0..d583cceca 100644 --- a/testcases/kernel/syscalls/creat/creat09.c +++ b/testcases/kernel/syscalls/creat/creat09.c @@ -28,6 +28,16 @@ * Date: Fri Jan 22 16:48:18 2021 -0800 * * xfs: fix up non-directory creation in SGID directories + * + * When use acl or umask, it still has bug. + * + * Fixed in: + * + * commit 1639a49ccdce58ea248841ed9b23babcce6dbb0b + * Author: Yang Xu <xuyang2018.jy@fujitsu.com> + * Date: Thu July 14 14:11:27 2022 +0800 + * + * fs: move S_ISGID stripping into the vfs_*() helpers */ #include <stdlib.h> @@ -47,6 +57,14 @@ static gid_t free_gid; static int fd = -1; +static struct tcase { + const char *msg; + int mask; +} tcases[] = { + {"under umask(0) situation", 0}, + {"under umask(S_IXGRP) situation", S_IXGRP} +}; + static void setup(void) { struct stat buf; @@ -94,8 +112,14 @@ static void file_test(const char *name) tst_res(TPASS, "%s: Setgid bit not set", name); } -static void run(void) +static void run(unsigned int n) { + struct tcase *tc = &tcases[n]; + + umask(tc->mask); + tst_res(TINFO, "Testing setgid behaviour when creating file %s", + tc->msg); + fd = SAFE_CREAT(CREAT_FILE, MODE_SGID); SAFE_CLOSE(fd); file_test(CREAT_FILE); @@ -115,13 +139,14 @@ static void cleanup(void) } static struct tst_test test = { - .test_all = run, + .test = run, .setup = setup, .cleanup = cleanup, .needs_root = 1, .all_filesystems = 1, .mount_device = 1, .mntpoint = MNTPOINT, + .tcnt = ARRAY_SIZE(tcases), .skip_filesystems = (const char*[]) { "exfat", "ntfs", @@ -132,6 +157,7 @@ static struct tst_test test = { {"linux-git", "0fa3ecd87848"}, {"CVE", "2018-13405"}, {"linux-git", "01ea173e103e"}, + {"linux-git", "1639a49ccdce"}, {} }, };