Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: sandbox/linux/seccomp-bpf/sandbox_bpf.h

Issue 681713002: Update from chromium https://crrev.com/301315 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef SANDBOX_LINUX_SECCOMP_BPF_SANDBOX_BPF_H__ 5 #ifndef SANDBOX_LINUX_SECCOMP_BPF_SANDBOX_BPF_H__
6 #define SANDBOX_LINUX_SECCOMP_BPF_SANDBOX_BPF_H__ 6 #define SANDBOX_LINUX_SECCOMP_BPF_SANDBOX_BPF_H__
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "sandbox/linux/seccomp-bpf/codegen.h" 13 #include "sandbox/linux/seccomp-bpf/codegen.h"
14 #include "sandbox/sandbox_export.h" 14 #include "sandbox/sandbox_export.h"
15 15
16 namespace sandbox { 16 namespace sandbox {
17 struct arch_seccomp_data; 17 struct arch_seccomp_data;
18 namespace bpf_dsl { 18 namespace bpf_dsl {
19 class SandboxBPFDSLPolicy; 19 class Policy;
20 } 20 }
21 21
22 class SANDBOX_EXPORT SandboxBPF { 22 class SANDBOX_EXPORT SandboxBPF {
23 public: 23 public:
24 enum SandboxStatus { 24 enum SandboxStatus {
25 STATUS_UNKNOWN, // Status prior to calling supportsSeccompSandbox() 25 STATUS_UNKNOWN, // Status prior to calling supportsSeccompSandbox()
26 STATUS_UNSUPPORTED, // The kernel does not appear to support sandboxing 26 STATUS_UNSUPPORTED, // The kernel does not appear to support sandboxing
27 STATUS_UNAVAILABLE, // Currently unavailable but might work again later 27 STATUS_UNAVAILABLE, // Currently unavailable but might work again later
28 STATUS_AVAILABLE, // Sandboxing is available but not currently active 28 STATUS_AVAILABLE, // Sandboxing is available but not currently active
29 STATUS_ENABLED // The sandbox is now active 29 STATUS_ENABLED // The sandbox is now active
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 // The sandbox needs to be able to access files in "/proc/self". If this 73 // The sandbox needs to be able to access files in "/proc/self". If this
74 // directory is not accessible when "startSandbox()" gets called, the caller 74 // directory is not accessible when "startSandbox()" gets called, the caller
75 // can provide an already opened file descriptor by calling "set_proc_fd()". 75 // can provide an already opened file descriptor by calling "set_proc_fd()".
76 // The sandbox becomes the new owner of this file descriptor and will 76 // The sandbox becomes the new owner of this file descriptor and will
77 // eventually close it when "StartSandbox()" executes. 77 // eventually close it when "StartSandbox()" executes.
78 void set_proc_fd(int proc_fd); 78 void set_proc_fd(int proc_fd);
79 79
80 // Set the BPF policy as |policy|. Ownership of |policy| is transfered here 80 // Set the BPF policy as |policy|. Ownership of |policy| is transfered here
81 // to the sandbox object. 81 // to the sandbox object.
82 void SetSandboxPolicy(bpf_dsl::SandboxBPFDSLPolicy* policy); 82 void SetSandboxPolicy(bpf_dsl::Policy* policy);
83 83
84 // UnsafeTraps require some syscalls to always be allowed. 84 // UnsafeTraps require some syscalls to always be allowed.
85 // This helper function returns true for these calls. 85 // This helper function returns true for these calls.
86 static bool IsRequiredForUnsafeTrap(int sysno); 86 static bool IsRequiredForUnsafeTrap(int sysno);
87 87
88 // From within an UnsafeTrap() it is often useful to be able to execute 88 // From within an UnsafeTrap() it is often useful to be able to execute
89 // the system call that triggered the trap. The ForwardSyscall() method 89 // the system call that triggered the trap. The ForwardSyscall() method
90 // makes this easy. It is more efficient than calling glibc's syscall() 90 // makes this easy. It is more efficient than calling glibc's syscall()
91 // function, as it avoid the extra round-trip to the signal handler. And 91 // function, as it avoid the extra round-trip to the signal handler. And
92 // it automatically does the correct thing to report kernel-style error 92 // it automatically does the correct thing to report kernel-style error
(...skipping 28 matching lines...) Expand all
121 scoped_ptr<CodeGen::Program> AssembleFilter(bool force_verification); 121 scoped_ptr<CodeGen::Program> AssembleFilter(bool force_verification);
122 122
123 private: 123 private:
124 // Get a file descriptor pointing to "/proc", if currently available. 124 // Get a file descriptor pointing to "/proc", if currently available.
125 int proc_fd() { return proc_fd_; } 125 int proc_fd() { return proc_fd_; }
126 126
127 // Creates a subprocess and runs "code_in_sandbox" inside of the specified 127 // Creates a subprocess and runs "code_in_sandbox" inside of the specified
128 // policy. The caller has to make sure that "this" has not yet been 128 // policy. The caller has to make sure that "this" has not yet been
129 // initialized with any other policies. 129 // initialized with any other policies.
130 bool RunFunctionInPolicy(void (*code_in_sandbox)(), 130 bool RunFunctionInPolicy(void (*code_in_sandbox)(),
131 scoped_ptr<bpf_dsl::SandboxBPFDSLPolicy> policy); 131 scoped_ptr<bpf_dsl::Policy> policy);
132 132
133 // Performs a couple of sanity checks to verify that the kernel supports the 133 // Performs a couple of sanity checks to verify that the kernel supports the
134 // features that we need for successful sandboxing. 134 // features that we need for successful sandboxing.
135 // The caller has to make sure that "this" has not yet been initialized with 135 // The caller has to make sure that "this" has not yet been initialized with
136 // any other policies. 136 // any other policies.
137 bool KernelSupportSeccompBPF(); 137 bool KernelSupportSeccompBPF();
138 138
139 // Assembles and installs a filter based on the policy that has previously 139 // Assembles and installs a filter based on the policy that has previously
140 // been configured with SetSandboxPolicy(). 140 // been configured with SetSandboxPolicy().
141 void InstallFilter(bool must_sync_threads); 141 void InstallFilter(bool must_sync_threads);
142 142
143 // Verify the correctness of a compiled program by comparing it against the 143 // Verify the correctness of a compiled program by comparing it against the
144 // current policy. This function should only ever be called by unit tests and 144 // current policy. This function should only ever be called by unit tests and
145 // by the sandbox internals. It should not be used by production code. 145 // by the sandbox internals. It should not be used by production code.
146 void VerifyProgram(const CodeGen::Program& program); 146 void VerifyProgram(const CodeGen::Program& program);
147 147
148 static SandboxStatus status_; 148 static SandboxStatus status_;
149 149
150 bool quiet_; 150 bool quiet_;
151 int proc_fd_; 151 int proc_fd_;
152 bool sandbox_has_started_; 152 bool sandbox_has_started_;
153 scoped_ptr<bpf_dsl::SandboxBPFDSLPolicy> policy_; 153 scoped_ptr<bpf_dsl::Policy> policy_;
154 154
155 DISALLOW_COPY_AND_ASSIGN(SandboxBPF); 155 DISALLOW_COPY_AND_ASSIGN(SandboxBPF);
156 }; 156 };
157 157
158 } // namespace sandbox 158 } // namespace sandbox
159 159
160 #endif // SANDBOX_LINUX_SECCOMP_BPF_SANDBOX_BPF_H__ 160 #endif // SANDBOX_LINUX_SECCOMP_BPF_SANDBOX_BPF_H__
OLDNEW
« no previous file with comments | « sandbox/linux/seccomp-bpf/errorcode_unittest.cc ('k') | sandbox/linux/seccomp-bpf/sandbox_bpf.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698