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

Side by Side Diff: content/common/sandbox_seccomp_bpf_linux.cc

Issue 11312209: Revert "Enable Seccomp-BPF sandbox for renderers/workers and PPAPI processes on i386." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <asm/unistd.h> 5 #include <asm/unistd.h>
6 #include <dlfcn.h> 6 #include <dlfcn.h>
7 #include <errno.h> 7 #include <errno.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <linux/audit.h> 9 #include <linux/audit.h>
10 #include <linux/filter.h> 10 #include <linux/filter.h>
(...skipping 30 matching lines...) Expand all
41 namespace { 41 namespace {
42 42
43 inline bool IsChromeOS() { 43 inline bool IsChromeOS() {
44 #if defined(OS_CHROMEOS) 44 #if defined(OS_CHROMEOS)
45 return true; 45 return true;
46 #else 46 #else
47 return false; 47 return false;
48 #endif 48 #endif
49 } 49 }
50 50
51 inline bool IsArchitectureI386() {
52 #if defined(__i386__)
53 return true;
54 #else
55 return false;
56 #endif
57 }
58
59 inline bool IsArchitectureArm() { 51 inline bool IsArchitectureArm() {
60 #if defined(__arm__) 52 #if defined(__arm__)
61 return true; 53 return true;
62 #else 54 #else
63 return false; 55 return false;
64 #endif 56 #endif
65 } 57 }
66 58
67 intptr_t CrashSIGSYS_Handler(const struct arch_seccomp_data& args, void* aux) { 59 intptr_t CrashSIGSYS_Handler(const struct arch_seccomp_data& args, void* aux) {
68 int syscall = args.nr; 60 int syscall = args.nr;
(...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 #if defined(__arm__) 1186 #if defined(__arm__)
1195 IsArmPciConfig(sysno) || 1187 IsArmPciConfig(sysno) ||
1196 #endif 1188 #endif
1197 IsTimer(sysno)) { 1189 IsTimer(sysno)) {
1198 return true; 1190 return true;
1199 } else { 1191 } else {
1200 return false; 1192 return false;
1201 } 1193 }
1202 } 1194 }
1203 1195
1196 // x86_64 and ARM for now. Needs to be adapted and tested for i386.
1204 ErrorCode BaselinePolicy(int sysno) { 1197 ErrorCode BaselinePolicy(int sysno) {
1205 if (IsBaselinePolicyAllowed(sysno)) { 1198 if (IsBaselinePolicyAllowed(sysno)) {
1206 return ErrorCode(ErrorCode::ERR_ALLOWED); 1199 return ErrorCode(ErrorCode::ERR_ALLOWED);
1207 } 1200 }
1208
1209 #if defined(__i386__)
1210 // socketcall(2) should be tightened.
1211 if (IsSocketCall(sysno)) {
1212 return ErrorCode(ErrorCode::ERR_ALLOWED);
1213 }
1214 #endif
1215
1216 // TODO(jln): some system calls in those sets are not supposed to 1201 // TODO(jln): some system calls in those sets are not supposed to
1217 // return ENOENT. Return the appropriate error. 1202 // return ENOENT. Return the appropriate error.
1218 if (IsFileSystem(sysno) || IsCurrentDirectory(sysno)) { 1203 if (IsFileSystem(sysno) || IsCurrentDirectory(sysno)) {
1219 return ErrorCode(ENOENT); 1204 return ErrorCode(ENOENT);
1220 } 1205 }
1221 1206
1222 if (IsUmask(sysno) || IsDeniedFileSystemAccessViaFd(sysno) || 1207 if (IsUmask(sysno) || IsDeniedFileSystemAccessViaFd(sysno) ||
1223 IsDeniedGetOrModifySocket(sysno)) { 1208 IsDeniedGetOrModifySocket(sysno)) {
1224 return ErrorCode(EPERM); 1209 return ErrorCode(EPERM);
1225 } 1210 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 case __NR_sched_getscheduler: 1265 case __NR_sched_getscheduler:
1281 case __NR_sched_setscheduler: 1266 case __NR_sched_setscheduler:
1282 case __NR_setpriority: 1267 case __NR_setpriority:
1283 case __NR_sysinfo: 1268 case __NR_sysinfo:
1284 case __NR_times: 1269 case __NR_times:
1285 case __NR_uname: 1270 case __NR_uname:
1286 return ErrorCode(ErrorCode::ERR_ALLOWED); 1271 return ErrorCode(ErrorCode::ERR_ALLOWED);
1287 case __NR_prlimit64: 1272 case __NR_prlimit64:
1288 return ErrorCode(EPERM); // See crbug.com/160157. 1273 return ErrorCode(EPERM); // See crbug.com/160157.
1289 default: 1274 default:
1290 // These need further tightening.
1291 #if defined(__x86_64__) || defined(__arm__) 1275 #if defined(__x86_64__) || defined(__arm__)
1292 if (IsSystemVSharedMemory(sysno)) 1276 if (IsSystemVSharedMemory(sysno))
1293 return ErrorCode(ErrorCode::ERR_ALLOWED); 1277 return ErrorCode(ErrorCode::ERR_ALLOWED);
1294 #endif 1278 #endif
1295 #if defined(__i386__)
1296 if (IsSystemVIpc(sysno))
1297 return ErrorCode(ErrorCode::ERR_ALLOWED);
1298 #endif
1299 1279
1300 // Default on the baseline policy. 1280 // Default on the baseline policy.
1301 return BaselinePolicy(sysno); 1281 return BaselinePolicy(sysno);
1302 } 1282 }
1303 } 1283 }
1304 1284
1285 // x86_64 and ARM for now. Needs to be adapted and tested for i386.
1305 ErrorCode FlashProcessPolicy(int sysno, void *) { 1286 ErrorCode FlashProcessPolicy(int sysno, void *) {
1306 switch (sysno) { 1287 switch (sysno) {
1307 case __NR_sched_getaffinity: 1288 case __NR_sched_getaffinity:
1308 case __NR_sched_setscheduler: 1289 case __NR_sched_setscheduler:
1309 case __NR_times: 1290 case __NR_times:
1310 return ErrorCode(ErrorCode::ERR_ALLOWED); 1291 return ErrorCode(ErrorCode::ERR_ALLOWED);
1311 case __NR_ioctl: 1292 case __NR_ioctl:
1312 return ErrorCode(ENOTTY); // Flash Access. 1293 return ErrorCode(ENOTTY); // Flash Access.
1313 default: 1294 default:
1314 // These need further tightening.
1315 #if defined(__x86_64__) || defined(__arm__) 1295 #if defined(__x86_64__) || defined(__arm__)
1296 // These are under investigation, and hopefully not here for the long
1297 // term.
1316 if (IsSystemVSharedMemory(sysno)) 1298 if (IsSystemVSharedMemory(sysno))
1317 return ErrorCode(ErrorCode::ERR_ALLOWED); 1299 return ErrorCode(ErrorCode::ERR_ALLOWED);
1318 #endif 1300 #endif
1319 #if defined(__i386__)
1320 if (IsSystemVIpc(sysno))
1321 return ErrorCode(ErrorCode::ERR_ALLOWED);
1322 #endif
1323 1301
1324 // Default on the baseline policy. 1302 // Default on the baseline policy.
1325 return BaselinePolicy(sysno); 1303 return BaselinePolicy(sysno);
1326 } 1304 }
1327 } 1305 }
1328 1306
1329 ErrorCode BlacklistDebugAndNumaPolicy(int sysno, void *) { 1307 ErrorCode BlacklistDebugAndNumaPolicy(int sysno, void *) {
1330 if (!Sandbox::isValidSyscallNumber(sysno)) { 1308 if (!Sandbox::isValidSyscallNumber(sysno)) {
1331 // TODO(jln) we should not have to do that in a trivial policy. 1309 // TODO(jln) we should not have to do that in a trivial policy.
1332 return ErrorCode(ENOSYS); 1310 return ErrorCode(ENOSYS);
(...skipping 30 matching lines...) Expand all
1363 "/usr/lib64/va/drivers/i965_drv_video.so"; 1341 "/usr/lib64/va/drivers/i965_drv_video.so";
1364 dlopen(kI965DrvVideoPath_64, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE); 1342 dlopen(kI965DrvVideoPath_64, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE);
1365 } 1343 }
1366 } 1344 }
1367 #endif 1345 #endif
1368 } 1346 }
1369 1347
1370 Sandbox::EvaluateSyscall GetProcessSyscallPolicy( 1348 Sandbox::EvaluateSyscall GetProcessSyscallPolicy(
1371 const CommandLine& command_line, 1349 const CommandLine& command_line,
1372 const std::string& process_type) { 1350 const std::string& process_type) {
1351 #if defined(__x86_64__) || defined(__arm__)
1373 if (process_type == switches::kGpuProcess) { 1352 if (process_type == switches::kGpuProcess) {
1374 // On Chrome OS, --enable-gpu-sandbox enables the more restrictive policy. 1353 // On Chrome OS, --enable-gpu-sandbox enables the more restrictive policy.
1375 // However, we don't yet enable the more restrictive GPU process policy 1354 // However, we never enable the more restrictive GPU process policy on ARM.
1376 // on i386 or ARM. 1355 if (IsArchitectureArm() ||
1377 if (IsArchitectureI386() || IsArchitectureArm() ||
1378 (IsChromeOS() && !command_line.HasSwitch(switches::kEnableGpuSandbox))) 1356 (IsChromeOS() && !command_line.HasSwitch(switches::kEnableGpuSandbox)))
1379 return BlacklistDebugAndNumaPolicy; 1357 return BlacklistDebugAndNumaPolicy;
1380 else 1358 else
1381 return GpuProcessPolicy_x86_64; 1359 return GpuProcessPolicy_x86_64;
1382 } 1360 }
1383 1361
1384 if (process_type == switches::kPpapiPluginProcess) { 1362 if (process_type == switches::kPpapiPluginProcess) {
1385 // TODO(jln): figure out what to do with non-Flash PPAPI 1363 // TODO(jln): figure out what to do with non-Flash PPAPI
1386 // out-of-process plug-ins. 1364 // out-of-process plug-ins.
1387 return FlashProcessPolicy; 1365 return FlashProcessPolicy;
1388 } 1366 }
1389 1367
1390 if (process_type == switches::kRendererProcess || 1368 if (process_type == switches::kRendererProcess ||
1391 process_type == switches::kWorkerProcess) { 1369 process_type == switches::kWorkerProcess) {
1392 return RendererOrWorkerProcessPolicy; 1370 return RendererOrWorkerProcessPolicy;
1393 } 1371 }
1394 1372
1395 if (process_type == switches::kUtilityProcess) { 1373 if (process_type == switches::kUtilityProcess) {
1396 return BlacklistDebugAndNumaPolicy; 1374 return BlacklistDebugAndNumaPolicy;
1397 } 1375 }
1398 1376
1399 NOTREACHED(); 1377 NOTREACHED();
1400 // This will be our default if we need one. 1378 // This will be our default if we need one.
1401 return AllowAllPolicy; 1379 return AllowAllPolicy;
1380 #else
1381 // On other architectures (currently IA32),
1382 // we only have a small blacklist at the moment.
1383 (void) process_type;
1384 return BlacklistDebugAndNumaPolicy;
1385 #endif // __x86_64__ || __arm__
1402 } 1386 }
1403 1387
1404 // Initialize the seccomp-bpf sandbox. 1388 // Initialize the seccomp-bpf sandbox.
1405 bool StartBpfSandbox(const CommandLine& command_line, 1389 bool StartBpfSandbox(const CommandLine& command_line,
1406 const std::string& process_type) { 1390 const std::string& process_type) {
1407 Sandbox::EvaluateSyscall SyscallPolicy = 1391 Sandbox::EvaluateSyscall SyscallPolicy =
1408 GetProcessSyscallPolicy(command_line, process_type); 1392 GetProcessSyscallPolicy(command_line, process_type);
1409 1393
1410 // Warms up resources needed by the policy we're about to enable. 1394 // Warms up resources needed by the policy we're about to enable.
1411 WarmupPolicy(SyscallPolicy); 1395 WarmupPolicy(SyscallPolicy);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1465 // Process-specific policy. 1449 // Process-specific policy.
1466 ShouldEnableSeccompBpf(process_type) && 1450 ShouldEnableSeccompBpf(process_type) &&
1467 SupportsSandbox()) { 1451 SupportsSandbox()) {
1468 return StartBpfSandbox(command_line, process_type); 1452 return StartBpfSandbox(command_line, process_type);
1469 } 1453 }
1470 #endif 1454 #endif
1471 return false; 1455 return false;
1472 } 1456 }
1473 1457
1474 } // namespace content 1458 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698