[LTP] [PATCH v2] mknod02.c: Simplify and convert to new LTP API

Richard Palethorpe rpalethorpe@suse.de
Wed Aug 23 11:21:07 CEST 2023


Hello,

Petr Vorel <pvorel@suse.cz> writes:

> 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,

It is defined for all major file systems on the directory
inode_operations struct (e.g. search btrfs_mknod, xfs_vn_mknod, ext4_mknod).

If you setup clangd and provide a reasonabl compile_commands.json
(i.e. relatively large kernel config) you can search for places where
struct inode_operations.mk_nod is set.

So I'll go ahead and try to merge it.

-- 
Thank you,
Richard.


More information about the ltp mailing list