正如LDD3第6章p175所示,我们可以通过current->uid
和current->euid
获取当前流程UID和EUID。
但是,Linux内核4.2的struct task_struct
的定义不再包含uid
或euid
命名的字段。
所以,我想知道是否有其他方法可以获得UID和EUID?
谢谢!
答案 0 :(得分:7)
.uid
和.euid
字段已移至struct cred
,现已在.cred
中显示为struct task_struct
字段。它是在此提交中完成的:CRED: Separate task security context from task_struct。如果您查看include/linux/sched.h
文件的差异,您可以注意到这一变化:
- uid_t uid,euid,suid,fsuid;
- gid_t gid,egid,sgid,fsgid;
+ struct cred *cred; /* actual/objective task credentials */
所以现在而不是:
current->uid;
current->euid;
你应该使用:
const struct cred *cred = current_cred();
cred->uid;
cred->euid;
请注意,current_cred()
函数应该用于访问.cred
字段,因为它是RCU指针。
例如,还可以查看check_same_owner()实施。