2012-04-11 7 views
2

なぜseccompモードになったプロセスが終了時に常に終了するのですか?なぜseccompプロセスは常に終了しますか?

PR_SET_SECCOMP下のmanページから
$ cat simple.c 
#include <stdio.h> 
#include <stdlib.h> 
#include <linux/prctl.h> 

int main(int argc, char **argv) 
{ 
    printf("Starting\n"); 
    prctl(PR_SET_SECCOMP, 1); 
    printf("Running\n"); 
    exit(0); 
} 
$ cc -o simple simple.c 
$ ./simple || echo "Returned $?" 
Starting 
Running 
Killed 
Returned 137 

答えて

3

、唯一許可されたシステムコールが読み込まれ、書き込み、exitとsigreturn。

標準ライブラリ(最近のLinux)でexit(0)を呼び出すと、exitではなくexit_groupシステムコールが呼び出されます。これは許可されていないので、SIGKILLを取得します。

+0

ファンタスティック(あなたがプロセスをstraceの場合は...これを見ることができる)、ありがとうございました。 straceにexit_group呼び出しを出力するにはどうすればよいですか? strace ./simpleは、私のための書き込みの直後に "+++ SIGKILL +++によって殺された"ことを示しています。 – engie

+0

straceのexit_groupを見るには、PR_SET_SECCOMPを設定しないでください。 – antlersoft

+0

この[回答](http://stackoverflow.com/a/40455896/2411320)に示されているように、antlersoftは間違いなく正しいです。これを投稿してくれてありがとう、antlersoft! :) – gsamaras