OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/common/sandbox_linux/bpf_gpu_policy_linux.h" | 5 #include "content/common/sandbox_linux/bpf_gpu_policy_linux.h" |
6 | 6 |
7 #include <dlfcn.h> | 7 #include <dlfcn.h> |
8 #include <errno.h> | 8 #include <errno.h> |
9 #include <fcntl.h> | 9 #include <fcntl.h> |
10 #include <sys/socket.h> | 10 #include <sys/socket.h> |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
134 }; | 134 }; |
135 | 135 |
136 // x86_64/i386 or desktop ARM. | 136 // x86_64/i386 or desktop ARM. |
137 // A GPU broker policy is the same as a GPU policy with open and | 137 // A GPU broker policy is the same as a GPU policy with open and |
138 // openat allowed. | 138 // openat allowed. |
139 ResultExpr GpuBrokerProcessPolicy::EvaluateSyscall(int sysno) const { | 139 ResultExpr GpuBrokerProcessPolicy::EvaluateSyscall(int sysno) const { |
140 switch (sysno) { | 140 switch (sysno) { |
141 case __NR_access: | 141 case __NR_access: |
142 case __NR_open: | 142 case __NR_open: |
143 case __NR_openat: | 143 case __NR_openat: |
144 #if !defined(OS_CHROMEOS) | |
145 case __NR_unlink: | |
146 #endif | |
144 return Allow(); | 147 return Allow(); |
145 default: | 148 default: |
146 return GpuProcessPolicy::EvaluateSyscall(sysno); | 149 return GpuProcessPolicy::EvaluateSyscall(sysno); |
147 } | 150 } |
148 } | 151 } |
149 | 152 |
150 void UpdateProcessTypeToGpuBroker() { | 153 void UpdateProcessTypeToGpuBroker() { |
151 base::CommandLine::StringVector exec = | 154 base::CommandLine::StringVector exec = |
152 base::CommandLine::ForCurrentProcess()->GetArgs(); | 155 base::CommandLine::ForCurrentProcess()->GetArgs(); |
153 base::CommandLine::Reset(); | 156 base::CommandLine::Reset(); |
(...skipping 23 matching lines...) Expand all Loading... | |
177 | 180 |
178 GpuProcessPolicy::GpuProcessPolicy(bool allow_mincore) | 181 GpuProcessPolicy::GpuProcessPolicy(bool allow_mincore) |
179 : broker_process_(NULL), allow_mincore_(allow_mincore) { | 182 : broker_process_(NULL), allow_mincore_(allow_mincore) { |
180 } | 183 } |
181 | 184 |
182 GpuProcessPolicy::~GpuProcessPolicy() {} | 185 GpuProcessPolicy::~GpuProcessPolicy() {} |
183 | 186 |
184 // Main policy for x86_64/i386. Extended by CrosArmGpuProcessPolicy. | 187 // Main policy for x86_64/i386. Extended by CrosArmGpuProcessPolicy. |
185 ResultExpr GpuProcessPolicy::EvaluateSyscall(int sysno) const { | 188 ResultExpr GpuProcessPolicy::EvaluateSyscall(int sysno) const { |
186 switch (sysno) { | 189 switch (sysno) { |
190 #if !defined(OS_CHROMEOS) | |
191 case __NR_ftruncate: | |
192 #endif | |
187 case __NR_ioctl: | 193 case __NR_ioctl: |
188 return Allow(); | 194 return Allow(); |
189 case __NR_mincore: | 195 case __NR_mincore: |
190 if (allow_mincore_) { | 196 if (allow_mincore_) { |
191 return Allow(); | 197 return Allow(); |
192 } else { | 198 } else { |
193 return SandboxBPFBasePolicy::EvaluateSyscall(sysno); | 199 return SandboxBPFBasePolicy::EvaluateSyscall(sysno); |
194 } | 200 } |
195 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) | 201 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
196 // The Nvidia driver uses flags not in the baseline policy | 202 // The Nvidia driver uses flags not in the baseline policy |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
254 } | 260 } |
255 | 261 |
256 return true; | 262 return true; |
257 } | 263 } |
258 | 264 |
259 void GpuProcessPolicy::InitGpuBrokerProcess( | 265 void GpuProcessPolicy::InitGpuBrokerProcess( |
260 sandbox::bpf_dsl::Policy* (*broker_sandboxer_allocator)(void), | 266 sandbox::bpf_dsl::Policy* (*broker_sandboxer_allocator)(void), |
261 const std::vector<BrokerFilePermission>& permissions_extra) { | 267 const std::vector<BrokerFilePermission>& permissions_extra) { |
262 static const char kDriRcPath[] = "/etc/drirc"; | 268 static const char kDriRcPath[] = "/etc/drirc"; |
263 static const char kDriCard0Path[] = "/dev/dri/card0"; | 269 static const char kDriCard0Path[] = "/dev/dri/card0"; |
270 static const char kDevShm[] = "/dev/shm/"; | |
264 | 271 |
265 CHECK(broker_process_ == NULL); | 272 CHECK(broker_process_ == NULL); |
266 | 273 |
267 // All GPU process policies need these files brokered out. | 274 // All GPU process policies need these files brokered out. |
268 std::vector<BrokerFilePermission> permissions; | 275 std::vector<BrokerFilePermission> permissions; |
269 permissions.push_back(BrokerFilePermission::ReadWrite(kDriCard0Path)); | 276 permissions.push_back(BrokerFilePermission::ReadWrite(kDriCard0Path)); |
270 permissions.push_back(BrokerFilePermission::ReadOnly(kDriRcPath)); | 277 permissions.push_back(BrokerFilePermission::ReadOnly(kDriRcPath)); |
271 | 278 if (!IsChromeOS()) { |
279 permissions.push_back( | |
280 BrokerFilePermission::ReadWriteCreateUnlinkRecursive(kDevShm)); | |
281 } | |
Jorge Lucangeli Obes
2014/12/02 21:09:06
Let's keep the empty line below.
leecam
2014/12/03 17:08:51
Done.
| |
272 // Add eventual extra files from permissions_extra. | 282 // Add eventual extra files from permissions_extra. |
273 for (const auto& perm : permissions_extra) { | 283 for (const auto& perm : permissions_extra) { |
274 permissions.push_back(perm); | 284 permissions.push_back(perm); |
275 } | 285 } |
276 | 286 |
277 broker_process_ = new BrokerProcess(GetFSDeniedErrno(), permissions); | 287 broker_process_ = new BrokerProcess(GetFSDeniedErrno(), permissions); |
278 // The initialization callback will perform generic initialization and then | 288 // The initialization callback will perform generic initialization and then |
279 // call broker_sandboxer_callback. | 289 // call broker_sandboxer_callback. |
280 CHECK(broker_process_->Init(base::Bind(&UpdateProcessTypeAndEnableSandbox, | 290 CHECK(broker_process_->Init(base::Bind(&UpdateProcessTypeAndEnableSandbox, |
281 broker_sandboxer_allocator))); | 291 broker_sandboxer_allocator))); |
282 } | 292 } |
283 | 293 |
284 } // namespace content | 294 } // namespace content |
OLD | NEW |