如何在Linux Kernel 4.2中获取当前进程的UID和EUID?

时间:2016-08-30 14:02:32

标签: linux-kernel linux-device-driver

正如LDD3第6章p175所示,我们可以通过current->uidcurrent->euid获取当前流程UID和EUID。 但是,Linux内核4.2的struct task_struct的定义不再包含uideuid命名的字段。 所以,我想知道是否有其他方法可以获得UID和EUID? 谢谢!

1 个答案:

答案 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()实施。