Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/runner/linux_sandbox.h" | 5 #include "mojo/runner/linux_sandbox.h" |
| 6 | 6 |
| 7 #include <fcntl.h> | 7 #include <fcntl.h> |
| 8 #include <sys/syscall.h> | 8 #include <sys/syscall.h> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/debug/leak_annotations.h" | 11 #include "base/debug/leak_annotations.h" |
| 12 #include "base/posix/eintr_wrapper.h" | 12 #include "base/posix/eintr_wrapper.h" |
| 13 #include "base/rand_util.h" | 13 #include "base/rand_util.h" |
| 14 #include "base/sys_info.h" | 14 #include "base/sys_info.h" |
| 15 #include "sandbox/linux/bpf_dsl/policy.h" | 15 #include "sandbox/linux/bpf_dsl/policy.h" |
| 16 #include "sandbox/linux/bpf_dsl/trap_registry.h" | 16 #include "sandbox/linux/bpf_dsl/trap_registry.h" |
| 17 #include "sandbox/linux/seccomp-bpf-helpers/baseline_policy.h" | |
| 17 #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" | 18 #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" |
| 18 #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" | 19 #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" |
| 19 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" | 20 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" |
| 20 #include "sandbox/linux/services/credentials.h" | 21 #include "sandbox/linux/services/credentials.h" |
| 21 #include "sandbox/linux/services/namespace_sandbox.h" | 22 #include "sandbox/linux/services/namespace_sandbox.h" |
| 22 #include "sandbox/linux/services/proc_util.h" | 23 #include "sandbox/linux/services/proc_util.h" |
| 23 #include "sandbox/linux/services/thread_helpers.h" | 24 #include "sandbox/linux/services/thread_helpers.h" |
| 24 | 25 |
| 25 using sandbox::syscall_broker::BrokerFilePermission; | 26 using sandbox::syscall_broker::BrokerFilePermission; |
| 26 | 27 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 55 static_cast<int>(args.args[2])); | 56 static_cast<int>(args.args[2])); |
| 56 } else { | 57 } else { |
| 57 return -EPERM; | 58 return -EPERM; |
| 58 } | 59 } |
| 59 default: | 60 default: |
| 60 RAW_CHECK(false); | 61 RAW_CHECK(false); |
| 61 return -ENOSYS; | 62 return -ENOSYS; |
| 62 } | 63 } |
| 63 } | 64 } |
| 64 | 65 |
| 65 class SandboxPolicy : public sandbox::bpf_dsl::Policy { | 66 class SandboxPolicy : public sandbox::BaselinePolicy { |
| 66 public: | 67 public: |
| 67 explicit SandboxPolicy(sandbox::syscall_broker::BrokerProcess* broker_process) | 68 explicit SandboxPolicy(sandbox::syscall_broker::BrokerProcess* broker_process) |
| 68 : broker_process_(broker_process) {} | 69 : broker_process_(broker_process) {} |
| 69 ~SandboxPolicy() override {} | 70 ~SandboxPolicy() override {} |
| 70 | 71 |
| 71 // Overridden from sandbox::bpf_dsl::Policy: | 72 // Overridden from sandbox::bpf_dsl::Policy: |
| 72 sandbox::bpf_dsl::ResultExpr EvaluateSyscall(int sysno) const override { | 73 sandbox::bpf_dsl::ResultExpr EvaluateSyscall(int sysno) const override { |
| 73 // This policy is only advisory/for noticing FS access for the moment. | 74 // This policy is only advisory/for noticing FS access for the moment. |
| 74 switch (sysno) { | 75 switch (sysno) { |
| 75 case __NR_access: | 76 case __NR_access: |
| 76 case __NR_open: | 77 case __NR_open: |
| 77 case __NR_faccessat: | 78 case __NR_faccessat: |
| 78 case __NR_openat: | 79 case __NR_openat: |
| 79 return sandbox::bpf_dsl::Trap(SandboxSIGSYSHandler, broker_process_); | 80 return sandbox::bpf_dsl::Trap(SandboxSIGSYSHandler, broker_process_); |
| 81 case __NR_ftruncate: | |
| 82 case __NR_getrlimit: | |
| 83 case __NR_sched_getaffinity: | |
| 84 case __NR_uname: | |
| 85 return sandbox::bpf_dsl::Allow(); | |
|
rickyz (no longer on Chrome)
2015/08/31 20:42:42
ftruncate/getrlimit/uname look fine - for sched_ge
| |
| 80 } | 86 } |
| 81 | 87 |
| 82 return sandbox::bpf_dsl::Allow(); | 88 return BaselinePolicy::EvaluateSyscall(sysno); |
| 83 } | 89 } |
| 84 | 90 |
| 85 private: | 91 private: |
| 86 // Not owned. | 92 // Not owned. |
| 87 const sandbox::syscall_broker::BrokerProcess* broker_process_; | 93 const sandbox::syscall_broker::BrokerProcess* broker_process_; |
| 88 DISALLOW_COPY_AND_ASSIGN(SandboxPolicy); | 94 DISALLOW_COPY_AND_ASSIGN(SandboxPolicy); |
| 89 }; | 95 }; |
| 90 | 96 |
| 91 } // namespace | 97 } // namespace |
| 92 | 98 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 132 // The Broker is now bound to this process and should only be destroyed when | 138 // The Broker is now bound to this process and should only be destroyed when |
| 133 // the process exits or is killed. | 139 // the process exits or is killed. |
| 134 ANNOTATE_LEAKING_OBJECT_PTR(broker_.release()); | 140 ANNOTATE_LEAKING_OBJECT_PTR(broker_.release()); |
| 135 } | 141 } |
| 136 | 142 |
| 137 void LinuxSandbox::Seal() { | 143 void LinuxSandbox::Seal() { |
| 138 proc_fd_.reset(); | 144 proc_fd_.reset(); |
| 139 } | 145 } |
| 140 | 146 |
| 141 } // namespace mandoline | 147 } // namespace mandoline |
| OLD | NEW |