Почему процесс seccomp всегда убивается?

Почему процесс, который перешел в режим 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

1 ответ

Решение

На странице руководства в разделе PR_SET_SECCOMP разрешены только системные вызовы read, write, exit и sigreturn.

Когда вы вызываете exit(0) в стандартной библиотеке (в недавнем Linux), вы вызываете системный вызов exit_group, а не exit. Это не разрешено, поэтому вы получите SIGKILL.

(Вы можете увидеть это, если вы затянете процесс...)

Другие вопросы по тегам