Yan*_* fr 4 linux-device-driver linux-kernel
正如LDD3第6章p175所示,我们可以通过current->uid和获取当前进程UID和EUID current->euid.但是,定义struct task_structLinux内核4.2的不包含由命名字段uid或euid更多.所以,我想知道是否有其他方法可以获得UID和EUID?谢谢!
.uid和.euid字段被移动到struct cred,现在显示为.cred字段struct task_struct.它是在此提交中完成的:CRED:从task_struct中分离任务安全上下文.如果你看看diff for include/linux/sched.hfile,你可以注意到这个变化:
- uid_t uid,euid,suid,fsuid;
- gid_t gid,egid,sgid,fsgid;
+ struct cred *cred; /* actual/objective task credentials */
Run Code Online (Sandbox Code Playgroud)
所以现在而不是:
current->uid;
current->euid;
Run Code Online (Sandbox Code Playgroud)
你应该使用:
const struct cred *cred = current_cred();
cred->uid;
cred->euid;
Run Code Online (Sandbox Code Playgroud)
请注意,current_cred()函数应该用于访问.cred字段,因为它是RCU指针.
另请查看check_same_owner()实现.