| Index: sandbox/linux/seccomp-bpf/demo.cc
|
| diff --git a/sandbox/linux/seccomp-bpf/demo.cc b/sandbox/linux/seccomp-bpf/demo.cc
|
| index 02fd8a0140983653e9b8eb7442d81a19c7bfd4e6..fcae39936284d81d7669ee04c91a77c80fa74494 100644
|
| --- a/sandbox/linux/seccomp-bpf/demo.cc
|
| +++ b/sandbox/linux/seccomp-bpf/demo.cc
|
| @@ -137,92 +137,102 @@ static intptr_t defaultHandler(const struct arch_seccomp_data& data,
|
| return -ERR;
|
| }
|
|
|
| -static ErrorCode evaluator(int sysno) {
|
| +static ErrorCode evaluator(int sysno, void *) {
|
| switch (sysno) {
|
| - #if defined(__NR_accept)
|
| - case __NR_accept: case __NR_accept4:
|
| +#if defined(__NR_accept)
|
| + case __NR_accept: case __NR_accept4:
|
| #endif
|
| - case __NR_alarm:
|
| - case __NR_brk:
|
| - case __NR_clock_gettime:
|
| - case __NR_close:
|
| - case __NR_dup: case __NR_dup2:
|
| - case __NR_epoll_create: case __NR_epoll_ctl: case __NR_epoll_wait:
|
| - case __NR_exit: case __NR_exit_group:
|
| - case __NR_fcntl:
|
| + case __NR_alarm:
|
| + case __NR_brk:
|
| + case __NR_clock_gettime:
|
| + case __NR_close:
|
| + case __NR_dup: case __NR_dup2:
|
| + case __NR_epoll_create: case __NR_epoll_ctl: case __NR_epoll_wait:
|
| + case __NR_exit: case __NR_exit_group:
|
| + case __NR_fcntl:
|
| #if defined(__NR_fcntl64)
|
| - case __NR_fcntl64:
|
| + case __NR_fcntl64:
|
| #endif
|
| - case __NR_fdatasync:
|
| - case __NR_fstat:
|
| + case __NR_fdatasync:
|
| + case __NR_fstat:
|
| #if defined(__NR_fstat64)
|
| - case __NR_fstat64:
|
| + case __NR_fstat64:
|
| #endif
|
| - case __NR_ftruncate:
|
| - case __NR_futex:
|
| - case __NR_getdents: case __NR_getdents64:
|
| - case __NR_getegid:
|
| + case __NR_ftruncate:
|
| + case __NR_futex:
|
| + case __NR_getdents: case __NR_getdents64:
|
| + case __NR_getegid:
|
| #if defined(__NR_getegid32)
|
| - case __NR_getegid32:
|
| + case __NR_getegid32:
|
| #endif
|
| - case __NR_geteuid:
|
| + case __NR_geteuid:
|
| #if defined(__NR_geteuid32)
|
| - case __NR_geteuid32:
|
| + case __NR_geteuid32:
|
| #endif
|
| - case __NR_getgid:
|
| + case __NR_getgid:
|
| #if defined(__NR_getgid32)
|
| - case __NR_getgid32:
|
| + case __NR_getgid32:
|
| #endif
|
| - case __NR_getitimer: case __NR_setitimer:
|
| + case __NR_getitimer: case __NR_setitimer:
|
| #if defined(__NR_getpeername)
|
| - case __NR_getpeername:
|
| + case __NR_getpeername:
|
| #endif
|
| - case __NR_getpid: case __NR_gettid:
|
| + case __NR_getpid: case __NR_gettid:
|
| #if defined(__NR_getsockname)
|
| - case __NR_getsockname:
|
| + case __NR_getsockname:
|
| #endif
|
| - case __NR_gettimeofday:
|
| - case __NR_getuid:
|
| + case __NR_gettimeofday:
|
| + case __NR_getuid:
|
| #if defined(__NR_getuid32)
|
| - case __NR_getuid32:
|
| + case __NR_getuid32:
|
| #endif
|
| #if defined(__NR__llseek)
|
| - case __NR__llseek:
|
| + case __NR__llseek:
|
| #endif
|
| - case __NR_lseek:
|
| - case __NR_nanosleep:
|
| - case __NR_pipe: case __NR_pipe2:
|
| - case __NR_poll:
|
| - case __NR_pread64: case __NR_preadv:
|
| - case __NR_pwrite64: case __NR_pwritev:
|
| - case __NR_read: case __NR_readv:
|
| - case __NR_restart_syscall:
|
| - case __NR_set_robust_list:
|
| - case __NR_rt_sigaction:
|
| + case __NR_lseek:
|
| + case __NR_nanosleep:
|
| + case __NR_pipe: case __NR_pipe2:
|
| + case __NR_poll:
|
| + case __NR_pread64: case __NR_preadv:
|
| + case __NR_pwrite64: case __NR_pwritev:
|
| + case __NR_read: case __NR_readv:
|
| + case __NR_restart_syscall:
|
| + case __NR_set_robust_list:
|
| + case __NR_rt_sigaction:
|
| #if defined(__NR_sigaction)
|
| - case __NR_sigaction:
|
| + case __NR_sigaction:
|
| #endif
|
| #if defined(__NR_signal)
|
| - case __NR_signal:
|
| + case __NR_signal:
|
| #endif
|
| - case __NR_rt_sigprocmask:
|
| + case __NR_rt_sigprocmask:
|
| #if defined(__NR_sigprocmask)
|
| - case __NR_sigprocmask:
|
| + case __NR_sigprocmask:
|
| #endif
|
| #if defined(__NR_shutdown)
|
| - case __NR_shutdown:
|
| + case __NR_shutdown:
|
| #endif
|
| - case __NR_rt_sigreturn:
|
| + case __NR_rt_sigreturn:
|
| #if defined(__NR_sigreturn)
|
| - case __NR_sigreturn:
|
| + case __NR_sigreturn:
|
| #endif
|
| #if defined(__NR_socketpair)
|
| - case __NR_socketpair:
|
| + case __NR_socketpair:
|
| #endif
|
| - case __NR_time:
|
| - case __NR_uname:
|
| - case __NR_write: case __NR_writev:
|
| - return ErrorCode(ErrorCode::ERR_ALLOWED);
|
| + case __NR_time:
|
| + case __NR_uname:
|
| + case __NR_write: case __NR_writev:
|
| + return ErrorCode(ErrorCode::ERR_ALLOWED);
|
| +
|
| + case __NR_prctl:
|
| + // Allow PR_SET_DUMPABLE and PR_GET_DUMPABLE. Do not allow anything else.
|
| + return Sandbox::Cond(1, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
|
| + PR_SET_DUMPABLE,
|
| + ErrorCode(ErrorCode::ERR_ALLOWED),
|
| + Sandbox::Cond(1, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
|
| + PR_GET_DUMPABLE,
|
| + ErrorCode(ErrorCode::ERR_ALLOWED),
|
| + Sandbox::Trap(defaultHandler, NULL)));
|
|
|
| // The following system calls are temporarily permitted. This must be
|
| // tightened later. But we currently don't implement enough of the sandboxing
|
| @@ -250,7 +260,6 @@ static ErrorCode evaluator(int sysno) {
|
| #endif
|
| case __NR_getrlimit:
|
| case __NR_ioctl:
|
| - case __NR_prctl:
|
| case __NR_clone:
|
| case __NR_munmap: case __NR_mprotect: case __NR_madvise:
|
| case __NR_remap_file_pages:
|
| @@ -278,8 +287,8 @@ static void *sendmsgStressThreadFnc(void *arg) {
|
| }
|
| size_t len = 4;
|
| char buf[4];
|
| - if (!Util::sendFds(fds[0], "test", 4, fds[1], fds[1], fds[1], -1) ||
|
| - !Util::getFds(fds[1], buf, &len, fds+2, fds+3, fds+4, NULL) ||
|
| + if (!Util::SendFds(fds[0], "test", 4, fds[1], fds[1], fds[1], -1) ||
|
| + !Util::GetFds(fds[1], buf, &len, fds+2, fds+3, fds+4, NULL) ||
|
| len != 4 ||
|
| memcmp(buf, "test", len) ||
|
| write(fds[2], "demo", 4) != 4 ||
|
| @@ -302,14 +311,14 @@ int main(int argc, char *argv[]) {
|
| if (argc) { }
|
| if (argv) { }
|
| int proc_fd = open("/proc", O_RDONLY|O_DIRECTORY);
|
| - if (Sandbox::supportsSeccompSandbox(proc_fd) !=
|
| + if (Sandbox::SupportsSeccompSandbox(proc_fd) !=
|
| Sandbox::STATUS_AVAILABLE) {
|
| perror("sandbox");
|
| _exit(1);
|
| }
|
| - Sandbox::setProcFd(proc_fd);
|
| - Sandbox::setSandboxPolicy(evaluator, NULL);
|
| - Sandbox::startSandbox();
|
| + Sandbox::set_proc_fd(proc_fd);
|
| + Sandbox::SetSandboxPolicy(evaluator, NULL);
|
| + Sandbox::StartSandbox();
|
|
|
| // Check that we can create threads
|
| pthread_t thr;
|
| @@ -367,8 +376,8 @@ int main(int argc, char *argv[]) {
|
| }
|
| size_t len = 4;
|
| char buf[4];
|
| - if (!Util::sendFds(fds[0], "test", 4, fds[1], -1) ||
|
| - !Util::getFds(fds[1], buf, &len, fds+2, NULL) ||
|
| + if (!Util::SendFds(fds[0], "test", 4, fds[1], -1) ||
|
| + !Util::GetFds(fds[1], buf, &len, fds+2, NULL) ||
|
| len != 4 ||
|
| memcmp(buf, "test", len) ||
|
| write(fds[2], "demo", 4) != 4 ||
|
|
|