3

EXT2 file.c打开文件操作(.open)中被指向dquot_file_open哪个更进一步指向generic_file_open哪个存在于fs/open.c.

generic_file_open看起来它只有以下代码

int generic_file_open(struct inode * inode, struct file * filp)
{
    if (!(filp->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS)
        return -EOVERFLOW;
    return 0;
}

即将打开文件时在哪里检查 ACL 权限?

我什么时候用谷歌搜索并使用 LXR 浏览了代码,我找到了以下路径。

do_sys_open -> do_filp_open -> path_openat -> do_last -> may_open -> inode_permission -> do_inode_permission -> generic_permission -> acl_permission_check -> check_acl -> posix_acl_permission

但我不明白 EXT2 的 .open 是如何链接到 do_sys_open 的。

任何帮助让我知道在文件打开期间检查 acl 权限的路径将不胜感激。

4

2 回答 2

2

您从错误的角度看待它:名称就像是系统调用入口点,并且在验证权限do_sys_open最终会通过 VFS 层找到 ext2open例程。

于 2012-04-26T01:17:42.627 回答
1

我认为您被 ACL 代码迷惑了;一旦获得许可,nameidata_to_filp请按照__dentry_open

__dentry_open()

    f->f_op = fops_get(inode->i_fop);
    /* ... */
    if (!open && f->f_op)
            open = f->f_op->open;
    if (open) {
            error = open(inode, f);
            if (error)
                    goto cleanup_all;
    }

这会将inode->i_fop->open函数指针保存到自动变量open,然后继续在inodeand上调用它f

于 2012-04-26T01:28:02.240 回答