我写了一个读取/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也可能对你感兴趣