内核版本(4.15)
do_sys_open
do_filp_open
path_openat
do_last
lookup_open
dir_inode->i_op->create
jffs2_create
jffs2_new_inode
在 jffs2_new_inode里, 当父目录设置了 set-group-ID, 则当前新创建的文件的 gid 与父目录的 gid相同,并且如果新创建的文件为目录,则该新建的目录也继承设置 set-group-ID。 如果没有设置 set-group-ID, 则新建文件的gid赋值为当前进程的fsgid, 执行的代码如下:
if (dir_i->i_mode & S_ISGID) {
ri->gid = cpu_to_je16(i_gid_read(dir_i));
if (S_ISDIR(mode))
mode |= S_ISGID;
} else {
ri->gid = cpu_to_je16(from_kgid(&init_user_ns, current_fsgid()));
}
i_gid_write(inode, je16_to_cpu(ri->gid));
i_uid_write(inode, je16_to_cpu(ri->uid));