我有一个 task_struct *
我通过调用 find_task_by_vpid(get_pid())
得到的.我想弄清楚哪个用户拥有该进程,以便我可以在我正在编写的系统调用中进行一些权限检查,但要查看 task_struct
源代码没有太大帮助。唯一看起来有用的是loginuid
,但由于某种原因,如果我尝试像这样访问它,内核将无法编译:my_task_struct->loginuid
.是否有另一种方法可以让从 task_struct
调用该进程的用户? ?
最佳答案
不幸的是,用户/组 ID 不再存储在任务结构中,而是存储在一个单独的权限结构中,该结构在具有相同 ID 的所有任务之间动态分配和共享。这反过来又造成了 setuid
的情况。可能由于资源耗尽和 setuid
的失败而失败支持特权是臭名昭著的漏洞来源......
无论如何,它在 task_struct
的这些成员中:
const struct cred __rcu *real_cred; /* objective and real subjective task
* credentials (COW) */
const struct cred __rcu *cred; /* effective (overridable) subjective task
* credentials (COW) */
关于multithreading - 有没有办法从进程的 task_struct 中找出哪个用户拥有进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104803/