什么get_current()在这个内核模块中返回?

我写了一个读取/proc写入/proc文件的内核模块,它工作正常。 现在我想使用它的权限,但是当我写下面显示的权限的function,它给我一个错误。 目标是让每个人都能够读取文件,但只有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' 

我知道current是#defined get_current() 。 为什么发生这种情况? 是否有从get_current()返回结构的成员列表?

struct task_struct是在内核源代码树的include/linux/sched.h中定义的,你可以在这里查看成员。 当前的凭证将在get_current()->cred ,而有效的用户标识是get_current()->cred->euid

直接访问这些成员是不安全的,您必须从include/linux/cred.h调用current_euid()

http://www.kernel.org/doc/Documentation/security/credentials.txt也可能对你感兴趣