2012-04-11 1 views
2

Pourquoi un processus passé en mode seccomp est-il toujours tué à la sortie?Pourquoi un processus seccomp est-il toujours tué?

$ 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 

Répondre

3

De la page de manuel, sous PR_SET_SECCOMP, les appels système ne sont autorisés lecture, d'écriture, de sortie et sigreturn. Lorsque vous appelez exit (0) dans la bibliothèque standard (dans Linux récent), vous appelez l'appel système exit_group, pas exit. Ce n'est pas autorisé, donc vous obtenez un SIGKILL.

(Vous pouvez voir ceci si vous stracez le processus ...)

+0

Fantastique, merci. Comment obtenez-vous strace pour imprimer l'appel exit_group? strace ./simple montre "+++ tué par SIGKILL +++" immédiatement après l'écriture pour moi. – engie

+0

Pour voir le exit_group dans strace, vous devez * not * set PR_SET_SECCOMP. – antlersoft

+0

@engie antlersoft a définitivement raison, comme le montre cette [réponse] (http://stackoverflow.com/a/40455896/2411320). Merci à antlersoft de l'avoir posté! :) – gsamaras

Questions connexes