linux prctl系统调用触发IPI

prctl系统调用提供了一系列操作进程的方法。

这里主要说明一下PR_SET_SECCOMP参数是如何触发IPI的。

seccomp 是 secure computing 的缩写,是 Linux kernel 从2.6.23版本引入的一种简洁的沙盒 sandboxing 机制。
在 Linux 系统里,大量的系统调用(system call)直接暴露给用户态程序。但是,通常的程序并不需要所有的系统调用,滥用系统调用会对系统造成安全威胁。
seccomp安全机制能使指定的进程进入到一种“安全”运行模式,该模式下的进程要么只能调用4种系统调用(system call),即 read(), write(), exit() 和 sigreturn(),要么只能运行用户指定的系统调用,这些可以运行的系统调用放到白名单中,如果调用其他系统调会发送错误信号给进程。

进程调用系统调用prctl,如果参数为PR_SET_SECCOMP,那么后面会为安全考虑,会将一些页面的权限设置为只读,这是通过调用set_memory_ro函数实现。
更新了页面的权限后,需要刷新TLB,因此会调用flush_tlb_all,这样就会向所有线上cpu发送IPI来刷新TLB。

因此,在实时系统中使用prctl系统调用必须小心,因为有可能因为刷新TLB触发IPI,影响系统的确定性。

猜你喜欢

转载自blog.csdn.net/wdjjwb/article/details/80853901