From: Avinesh Kumar <akumar@suse.de>
To: Petr Vorel <pvorel@suse.cz>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v2] mknod02.c: Simplify and convert to new LTP API
Date: Wed, 17 May 2023 20:37:21 +0530 [thread overview]
Message-ID: <5961201.lOV4Wx5bFT@localhost> (raw)
In-Reply-To: <20230516115841.GA7742@pevik>
Hi Petr,
On Tuesday, May 16, 2023 5:28:41 PM IST Petr Vorel wrote:
> Hi Avinesh,
>
> > Simply test when parent directory does not have set-group-ID bit set,
> > new node gets GID from effective GID of the process and does not inherit
> > the group ownership from its parent directory.
>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
>
> Few comments below.
>
> > testcases/kernel/syscalls/mknod/mknod02.c | 316 +++-------------------
> > 1 file changed, 36 insertions(+), 280 deletions(-)
>
> ...
>
> > +/*\
> > + * [Description]
> >
> > *
> >
> > + * Verify that if mknod(2) creates a filesystem node in a directory which
> > + * does not have the set-group-ID bit set, new node will not inherit the
> > + * group ownership from its parent directory and its group ID will be the
> > + * effective group ID of the process.
>
> @Cyril I wonder if it'd be good to test this on all_filesystems. Are we
> trying to use use all_filesystems = 1 when subject of testing is using VFS
> or the opposite? (kernel docs mentions "VFS system calls open(2), stat(2),
> read(2), write(2), chmod(2)". It also mentions locking [2]).
>
> BTW looking what has mknod in vfs, it's just nfsd and 9p (none of them are
> used in all_filesystems):
>
> $ git grep mknod $(git ls-files fs/|grep -i vfs)
> fs/9p/vfs_inode.c: * for mknod(2).
> fs/9p/vfs_inode.c: * v9fs_vfs_mknod - create a special file
> fs/9p/vfs_inode.c:v9fs_vfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
> fs/9p/vfs_inode.c: .mknod = v9fs_vfs_mknod,
> fs/9p/vfs_inode.c: .mknod = v9fs_vfs_mknod,
> fs/9p/vfs_inode_dotl.c:v9fs_vfs_mknod_dotl(struct mnt_idmap *idmap, struct
> inode *dir, fs/9p/vfs_inode_dotl.c: return v9fs_vfs_mknod_dotl(idmap, dir,
> dentry, omode, 0); fs/9p/vfs_inode_dotl.c: * v9fs_vfs_mknod_dotl - create a
> special file fs/9p/vfs_inode_dotl.c:v9fs_vfs_mknod_dotl(struct mnt_idmap
> *idmap, struct inode *dir, fs/9p/vfs_inode_dotl.c:
> p9_debug(P9_DEBUG_VFS, "Failed to get acl values in mknod %d\n",
> fs/9p/vfs_inode_dotl.c: err = p9_client_mknod_dotl(dfid, name, mode, rdev,
> gid, &qid); fs/9p/vfs_inode_dotl.c: .mknod = v9fs_vfs_mknod_dotl,
> fs/nfsd/vfs.c: host_err = vfs_mknod(&nop_mnt_idmap, dirp, dchild,
>
> > */
>
> ...
>
> > +static void run(void)
> >
> > {
>
> ...
>
> > + SAFE_CHDIR(TEMP_DIR);
> > + TST_EXP_PASS(mknod(TEMP_NODE, MODE1, 0), "mknod(%s, %o, 0)",
TEMP_NODE,
> > MODE1);
> IMHO this simple form will print the same info, I suggest to use it.
> TST_EXP_PASS(mknod(TEMP_NODE, MODE1, 0));
>
> > - /*
> > - * Create a test directory under temporary directory with the
> > - * specified mode permissions, with uid/gid set to that of guest
> > - * user and the test process.
> > - */
> > - SAFE_MKDIR(cleanup, DIR_TEMP, MODE_RWX);
> > - SAFE_CHOWN(cleanup, DIR_TEMP, user1_uid, group2_gid);
> > + SAFE_STAT(TEMP_NODE, &buf);
> > + TST_EXP_EQ_LI(buf.st_gid, 0);
>
> ...
>
> Diff for using all_filesystems (I'm not sure myself).
>
> Kind regards,
> Petr
Thanks for reviewing, I agree with your proposed changes if we are going to
enable if for all filesystems, test executes fine with all_filesystems=1 in my
setup.
>
> [1] https://www.kernel.org/doc/html/next/filesystems/vfs.html
> [2] https://www.kernel.org/doc/html/next/filesystems/locking.html
>
> +++ testcases/kernel/syscalls/mknod/mknod02.c
> @@ -24,6 +24,8 @@
> #define TEMP_DIR "testdir"
> #define TEMP_NODE "testnode"
>
> +#define MNTPOINT "mntpoint"
> +
> static struct stat buf;
> static struct passwd *user_nobody;
> static gid_t gid_nobody;
> @@ -40,18 +42,28 @@ static void setup(void)
> static void run(void)
> {
> SAFE_CHDIR(TEMP_DIR);
> - TST_EXP_PASS(mknod(TEMP_NODE, MODE1, 0), "mknod(%s, %o, 0)",
TEMP_NODE,
> MODE1); + TST_EXP_PASS(mknod(TEMP_NODE, MODE1, 0));
>
> SAFE_STAT(TEMP_NODE, &buf);
> TST_EXP_EQ_LI(buf.st_gid, 0);
>
> SAFE_UNLINK(TEMP_NODE);
> SAFE_CHDIR("..");
> +
> +}
> +
> +static void cleanup(void)
> +{
> + SAFE_RMDIR(TEMP_DIR);
> }
>
> static struct tst_test test = {
> .setup = setup,
> + .cleanup = cleanup,
> .test_all = run,
> .needs_root = 1,
> - .needs_tmpdir = 1
> + .needs_tmpdir = 1,
> + .mount_device = 1,
> + .mntpoint = MNTPOINT,
> + .all_filesystems = 1,
> };
Regards,
Avinesh
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2023-05-17 15:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-15 15:56 [LTP] [PATCH v2] mknod02.c: Simplify and convert to new LTP API Avinesh Kumar
2023-05-16 11:58 ` Petr Vorel
2023-05-17 15:07 ` Avinesh Kumar [this message]
2023-08-23 9:21 ` Richard Palethorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5961201.lOV4Wx5bFT@localhost \
--to=akumar@suse.de \
--cc=ltp@lists.linux.it \
--cc=pvorel@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.