Linux Block System调用

时间:2013-11-02 20:59:44

标签: c linux kernel system-calls

我正在尝试在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中直接执行此操作,或者是否可以修改syscall表在其他地方调用的方式。直接修改entry_32.S的问题是我不知道是否可以访问正在进行调用的任务结构。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果我这样做,我会挂钩__kernel_vsyscall(),如果任务结构按照你上面的逻辑表明,就停止发送。

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

答案 1 :(得分:1)

内核已经有一个非常相似的功能,称为seccompLWN article)。您可能需要考虑将此功能基于此,而不是实现新功能。