public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Avinesh Kumar <akumar@suse.de>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v2] mknod02.c: Simplify and convert to new LTP API
Date: Tue, 16 May 2023 13:58:41 +0200	[thread overview]
Message-ID: <20230516115841.GA7742@pevik> (raw)
In-Reply-To: <20230315155650.12469-1-akumar@suse.de>

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

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

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2023-05-16 11:58 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 [this message]
2023-05-17 15:07   ` Avinesh Kumar
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=20230516115841.GA7742@pevik \
    --to=pvorel@suse.cz \
    --cc=akumar@suse.de \
    --cc=ltp@lists.linux.it \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox