#include <errno.h>
#include <unistd.h>
#include <seccomp.h>
#include "util.h"
int main(int argc, char *argv[])
{
int rc;
scmp_filter_ctx ctx = NULL;
rc = util_action_parse(argv[1]);
if (rc != SCMP_ACT_ALLOW) {
rc = 1;
goto out;
}
rc = util_trap_install();
if (rc != 0)
goto out;
ctx = seccomp_init(SCMP_ACT_TRAP);
if (ctx == NULL)
return ENOMEM;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigreturn), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit_group), 0);
if (rc != 0)
goto out;
rc = seccomp_load(ctx);
if (rc != 0)
goto out;
rc = util_file_write("/dev/null");
if (rc != 0)
goto out;
rc = 160;
out:
seccomp_release(ctx);
return (rc < 0 ? -rc : rc);
}