|
我需要对某个特定的进程限制某些系统调用。
虽然strace可以实现这点,但是考虑到strace可能会影响性能,想通过修改内核实现。
我想把那些受到限制的进程都用某个特定的用户(uid)运行,内核系统调用的入口进行判断,如果是该uid则做相应的限制。
具体想更改的内核代码如下:
ENTRY(system_call)
pushl %eax # save orig_eax
SAVE_ALL
GET_THREAD_INFO(%ebp)
# system call tracing in operation / emulation
/* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
jnz syscall_trace_entry
cmpl $(nr_syscalls), %eax
jae syscall_badsys
/*
我想在此处增加一个判断,首先获得该进程的uid号,如果不是特定的uid则转入syscall_call继续运行。否则,判断是否为合法的系统调用,如果不合法则转入syscall_badsys,合法的系统调用则继续进入syscall_call。
*/
syscall_call:
call *sys_call_table(,%eax,4)
movl %eax,EAX(%esp) # store the return value
请问我添加代码的地方和思路是否正确?
如何才能得到该进程的uid号? |
|