2

我正在尝试在 linux 2.6.32.60 x86 内核中实现功能,这将允许我根据我在任务结构中添加的字段阻止所有系统调用。这基本上是以下形式:

task_struct ts;
if(ts-> added_field == 0)
    //do system call normally
else
   //don't do system call

我想知道是否应该直接在 entry_32.S 中执行此操作,或者是否可以修改在其他地方调用系统调用表的方式。直接修改 entry_32.S 的问题是我不知道我是否可以访问正在进行调用的任务结构。

谢谢您的帮助!

4

2 回答 2

2

如果我要这样做,__kernel_vsyscall()如果任务结构按照上面的逻辑指示,我会挂上并停止调度。

具体来说,arch/i386/kernel/vsyscall-sysenter.S它在每个进程的地址空间之间共享,并且是所有系统调用通过的入口点。这是发送实际系统调用之前的位置,在我看来,这是放置钩子的地方。您在进程的地址空间中,因此您应该有权访问mm->current您的任务结构。(另见arch/sh/kernel/vsyscall/vsyscall.c

于 2013-11-02T21:24:40.840 回答
2

内核已经有一个非常相似的特性,称为seccompLWN 文章)。您可能需要考虑将您的功能基于此,而不是实施新的东西。

于 2013-11-03T00:22:58.073 回答