0

man 2 seccompのセクションSECCOMP_SET_MODE_STRICTでは、次のように述べられています。

呼び出しスレッドは sigprocmask(2) を呼び出すことはできなくなりましたが、sigreturn(2) を使用して、SIGKILL と SIGSTOP 以外のすべてのシグナルをブロックできることに注意してください。

これを行う方法がわかりません。それsigreturnsyscall

この sigreturn() 呼び出しは、プロセスのシグナル マスクの変更、シグナル スタックの切り替え (sigaltstack(2) を参照) など、シグナル ハンドラを呼び出すために行われたすべての操作を元に戻します。

すなわち:

以前にユーザー空間スタックに保存された情報を使用して、
sigreturn() は、プロセスのシグナル マスクを復元し、スタックを切り替え、プロセスのコンテキスト (スタック ポインターと命令ポインターを含むプロセッサ フラグとレジスター) を復元します。

情報は次の方法で保存されます。

保存されたプロセス コンテキスト情報は、ucontext_t 構造体に配置されます ( を参照)。その構造は、SA_SIGINFO フラグを使用して sigaction(2) を介して確立されたハンドラーの 3 番目の引数として、シグナル ハンドラー内で表示されます。

以下の2点の理由から不可能と判断しました。

  1. シグナルに対するTERMアクションはユーザー空間に戻る必要がないので、dying使用atexitなどで防ぐ方法はありません。

    2. man 2 getcontextまたはman 3 makecontextucontext_tを入力することは可能ですが、ハンドラーをインストールしてシグナルをマスクするためのすべてのシステムコールが無効になっているため、プロセスがシグナルをブロックするのに役立ちません(シグナルマスクを行わない限り) 。もの自体)sigreturn

4

1 に答える 1