gpt4 book ai didi

c - struct task_struct 成员?

转载 作者:行者123 更新时间:2023-11-30 18:59:41 26 4
gpt4 key购买 nike

我已经编写了在/proc 文件上读取和写入的模块,并且工作正常,但是当我创建下面所示的权限函数时,想要使用它的权限,它给了我错误(基本上我希望每个人都可以读取该文件,但是只有 root 可以写入)。

int my_permission(struct inode *inode, int op)
{
if(op == 4||(op == 2 && current->euid = 0)) //euid is not a member of task_struct
return 0;
return -EACCES;
}
const struct inode_operations my_iops = {
.permission = my_permission,
};

但它给我的错误如下:

/home/karan/practice/procf/testproc1.c: In function ‘my_permission’:
/home/karan/practice/procf/testproc1.c:50:32: error: ‘struct task_struct’ has no member named ‘euid’

我认为 task_struct 中还有其他成员指向用户 id 。我对解决方案以及用于的 task_struct 成员字段的描述感兴趣。

问候卡兰

最佳答案

参见 include/linux/cred.h:

    #define current_euid()          (current_cred_xxx(euid))      #define current_cred_xxx(xxx)                   \    ({                                              \            current_cred()->xxx;                    \    })

因此 current_euid() 依赖于 current_cred():

    /**     * current_cred - Access the current task's subjective credentials     *     * Access the subjective credentials of the current task.  RCU-safe,     * since nobody else can modify it.     */    #define current_cred() \            rcu_dereference_protected(current->cred, 1)

因此,对于您的问题,要进行有效的 UID 比较,请查看/fs/exec.c:

    if (current_euid() == current_uid() && current_egid() == current_gid())    bprm->cred->euid = current_euid();            bprm->cred->euid = inode->i_uid

与您的程序对比:

    if (current_euid() == 0)

这意味着即使用户没有以UID=0登录,也会被有效地视为UID==0?听起来很危险

关于c - struct task_struct 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9117850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com