在linux内核(内核空间)中检索会话Id
我想在linux内核(内核空间)中检索当前进程的sessionid。我看到在linux内核(内核空间)中检索会话Id,linux,linux-kernel,kernel,sessionid,Linux,Linux Kernel,Kernel,Sessionid,我想在linux内核(内核空间)中检索当前进程的sessionid。我看到task\u struct有一个字段sessionid,但它只有在宏CONFIG\u AUDITSYSCALL打开时才定义。所以我试着用这个宏构建内核,但仍然没有得到结果。我还尝试使用audit\u get\u sessionid(当前)上的CONFIG\u AUDITSYSCALL从函数中获取其值,但得到的是-1或垃圾值(不同于用户空间中的getsid(0)方法) 我在这一点上感到震惊。任何建议都会有很大帮助。您可以在此
task\u struct
有一个字段sessionid
,但它只有在宏CONFIG\u AUDITSYSCALL
打开时才定义。所以我试着用这个宏构建内核,但仍然没有得到结果。我还尝试使用audit\u get\u sessionid(当前)
上的CONFIG\u AUDITSYSCALL
从函数中获取其值,但得到的是-1或垃圾值(不同于用户空间中的getsid(0)
方法)
我在这一点上感到震惊。任何建议都会有很大帮助。您可以在此处查看
getsid
syscall:
这表明您可以使用内核函数task_session()来获取会话id。pid_vnr(task_session(current));我会做你想做的 非常感谢库巴的及时回复。我尝试使用您提到的方法,但是对于用户空间中的getsid(0)和内核空间中的task_会话(current),我得到了不同的结果。值是:15422(使用getsid(0)):3473445976(使用task_session(current)),我刚刚计算出来:pid_vnr(task_session(current));将返回当前会话的id。感谢Kuba…@sebe,您正在编写内核代码,这让我很害怕,并且没有注意到示例代码中的
sid
是指针。这似乎是在提问者在评论中将其报告为解决方案数小时后发布的。
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 {
...