seccomp: from parent, найдите, какой системный вызов привел к смерти ребенка в SIGSYS - PullRequest
0 голосов
/ 01 ноября 2018

Я подробно опишу свой вопрос и простите, пожалуйста, моего неуправляемого и грубого.

Я провел несколько экспериментов с seccomp-BPF и передачей сигналов. Вначале я следовал этому учебнику .

После добавления обработки сигналов SIGSYS ( syscall-reporter.c ) я могу получить некоторые выходные данные ниже, если программа выполнит несколько недопустимых системных вызовов:

Looks like you need syscall fstat(5) too!

Я хочу знать, как можно распечатать имя системного вызова, если я выполню любой другой исполняемый файл, используя функцию execve или другой метод.

Я попробовал что-то вроде этого: основной процесс (процесс с именем только P0) сначала добавляет передачу сигнала SIGCHLD и разветвляет дочерний процесс (с именем P1). P1 добавит правила seccomp-bpf и выполнит действие seccomp SCMP_ACT_TRAP для недопустимых системных вызовов, затем с помощью функции execve заменит P1 исполняемым файлом (с именем E). При выполнении E и вызове некоторых недопустимых системных вызовов P1 сгенерирует сигнал SIGSYS и выйдет, а затем отправит сигнал SIGHLD на P0. Кажется, P0 не может получить недопустимое имя системного вызова из ucontext_t после получения сигнала SIGHLD.

P1 не может распечатать имя системного вызова, потому что

во время execve (2) расположение обработанных игнорирований сбрасывается до значения по умолчанию;

(из sigaction man-pages )

Извините за мой плохой английский.

...