2012-04-11 6 views
2

Warum wird ein Prozess, der in den seccomp-Modus gegangen ist, immer beim Beenden getötet?Warum wird ein seccomp Prozess immer getötet?

$ 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 

Antwort

3

Aus der Manpage unter PR_SET_SECCOMP, die nur gelesen werden dürfen Systemaufrufe schreiben, Ausgang und sigreturn.

Wenn Sie exit (0) in der Standardbibliothek (unter Linux) aufrufen, rufen Sie den Systemaufruf exit_group auf, nicht exit. Dies ist nicht erlaubt, also bekommst du ein SIGKILL.

(Sie können dies sehen, wenn Sie den Prozess strace ...)

+0

Fantastisch, danke. Wie bekommst du strace, um den Anruf exit_group zu drucken? strace ./simple zeigt "+++ von SIGKILL +++" sofort nach dem Schreiben für mich getötet. – engie

+0

Um die exit_group in strace zu sehen, müssen Sie PR_SET_SECCOMP * nicht * setzen. – antlersoft

+0

@engie antlersoft ist definitiv richtig, wie in dieser [Antwort] (http://stackoverflow.com/a/40455896/2411320) gezeigt. Danke antlersoft für das Posten! :) – gsamaras