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

Yan*_* fr 4 linux-device-driver linux-kernel

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

Sam*_*nko 8

.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()实现.

  • 谢谢!按照你的建议,我还在<linux/cred.h>中找到了一些有用的宏,例如`current_uid()`、`current_euid()`等,以获取这些当前进程的所有权信息。 (3认同)