Linux阻止系统调用

问题描述 投票:2回答: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里做这些事情 或者我是否可以修改syscall表在其他地方的调用方式. 直接修改 entry_32.S 的问题是,我不知道能否访问正在进行调用的任务结构。

谢谢大家的帮助!

c linux kernel system-calls
2个回答
2
投票

内核已经有一个非常类似的功能,叫做 证券公司 (LWN文章). 你可能会考虑以这个为基础,而不是实现一些新的功能。


2
投票

如果我要这样做,我会把它挂到 __kernel_vsyscall() 并且如果按照你上面的逻辑,任务结构如此表示,就停止派遣。

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.