【发布时间】:2021-08-27 05:07:12
【问题描述】:
我刚刚开始学习 seccomp 过滤器,我正在使用 libseccomp v2.4.4。我尝试编写一个基本的白名单过滤器,它只允许写入名为file1 的文件,但我在STDOUT 中收到“错误的系统调用”消息。这是我的代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <seccomp.h>
#include <stdlib.h>
#include <errno.h>
int main(void)
{
FILE *fil = fopen("file1", "w");
scmp_filter_ctx filter = seccomp_init(SCMP_ACT_KILL);
if (filter==NULL || NULL==fil)
goto End1;
int chk1 = seccomp_rule_add(filter, SCMP_ACT_ALLOW, SCMP_SYS(write), 1,
SCMP_A0(SCMP_CMP_EQ, fileno(fil)));
int chk2 = seccomp_load(filter);
if (chk1<0 || chk2<0)
goto End;
fprintf(stdout,"Filter did not work correctly\n");
fprintf(fil,"Filter worked correctly\n");
End:
seccomp_release(filter); //releasing filter before closing file
fclose(fil);
End1:
return 0;
}
此外,我在file1 中看不到任何输出。我只是一个初学者,对这里的很多事情都不确定,因为我是根据自己的理解编写代码,而不是参考一些参考资料。似乎是什么问题?
编辑:我完全删除了过滤器并简单地执行了
int main(void)
{
FILE *fil = fopen("file1", "w");
fprintf(stdout,"Filter did not work correctly\n");
fprintf(fil,"Filter worked correctly\n");
End:
fclose(fil);
End1:
return 0;
}
跟踪这一点,我观察到系统调用 fstat,close 在@pchaigno 下面的答案中提到,另外mmap,munmap 正在被调用。所以我必须允许这些系统调用来实现预期的行为。
【问题讨论】:
标签: c linux runtime-error bpf seccomp