【问题标题】:Why does a seccomp process always get killed?为什么 seccomp 进程总是被杀死?
【发布时间】:2012-04-11 22:00:05
【问题描述】:

为什么进入 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

【问题讨论】:

    标签: c linux seccomp


    【解决方案1】:

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

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

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

    【讨论】:

    • 太棒了,谢谢。你如何让 strace 打印 exit_group 调用? strace ./simple 在为我写完后立即显示“+++ 被 SIGKILL +++ 杀死”。
    • 要在 strace 中查看 exit_group,您必须设置 PR_SET_SECCOMP。
    • @engie antlersoft 绝对正确,如answer 所示。感谢 antlersoft 发布此信息! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2023-04-08
    • 1970-01-01
    • 2013-04-07
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多