3

为什么进入 seccomp 模式的进程总是在退出时被杀死?

$ 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
4

1 回答 1

5

在手册页的 PR_SET_SECCOMP 下,唯一允许的系统调用是 read、write、exit 和 sigreturn。

当您在标准库(在最近的 Linux 中)中调用 exit(0) 时,您调用的是 exit_group 系统调用,而不是退出。这是不允许的,所以你会得到一个 SIGKILL。

(如果你跟踪这个过程,你可以看到这一点......)

于 2012-04-11T22:17:14.080 回答