在linux内核中检索会话ID(内核空间)

时间:2012-05-02 22:50:24

标签: linux linux-kernel kernel sessionid

我想在linux内核(Kernel Space)中检索当前进程的sessionid。我看到task_struct有一个字段sessionid,但只有当宏CONFIG_AUDITSYSCALL为ON时才定义它。所以我尝试用这个宏构建内核但仍然没有得到结果。此外,我尝试在CONFIG_AUDITSYSCALL上使用audit_get_sessionid(current)从函数中获取其值,但是获得了-1或垃圾值(与用户空间中的getsid(0)方法不同)。

我很震惊。任何建议都会有很大的帮助。

2 个答案:

答案 0 :(得分:3)

您可以在此处查看getsid系统调用:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=kernel/sys.c#l1106

SYSCALL_DEFINE1(getsid, pid_t, pid)
{
     struct task_struct *p;
     struct pid *sid;
     int retval;

     rcu_read_lock();
     if (!pid)
             sid = task_session(current);
     else {
     ...

建议你可以使用内核函数task_session()来获取会话ID。

答案 1 :(得分:0)

pid_vnr(task_session(电流));会做你想要的!!