1. 程式人生 > >linux prctl系統呼叫觸發IPI

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,影響系統的確定性。