2012-05-02 62 views
1

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

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

回答

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。

+0

非常感谢Kuba的及时回复。我尝试使用你提到的,但我得到了不同的结果,用于用户空间中的getsid(0)和内核空间中的task_session(current)。 的值是:15422(具有GETSID(0)) :3473445976(与task_session(电流)) – CraCod

+2

我刚计算出来: pid_vnr(task_session(电流)); 会返回我们当前会话的ID。 感谢Kuba ... – CraCod

+0

@sebe它令我惊讶,你正在编写内核代码,并没有注意到示例代码中的'sid'是一个*指针*。 –

0

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

+0

这似乎是在提问者报告为评论中的解决方案后几小时发布的。 –

+0

对不起,请参阅评论! – helpme