正如 LDD3 第 6 章 p175 所示,我们可以通过以下方式获取当前进程 UID 和 EUIDcurrent->uid
and current->euid
。
但定义struct task_struct
Linux Kernel 4.2 不包含以下命名的字段uid
or euid
不再有。
所以我想知道是否还有其他方法获取UID和EUID?
谢谢!
.uid
and .euid
字段被移动到struct cred
,现在公开为.cred
领域在struct task_struct
。这是在这次提交中完成的:CRED:将任务安全上下文与task_struct分开 https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b6dff3ec5e116e3af6f537d4caedcad6b9e5082a。如果你查看 diff 的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 https://en.wikipedia.org/wiki/Read-copy-update指针。
还查看check_same_owner() http://lxr.free-electrons.com/source/kernel/sched/core.c#L3959例如实施。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)