OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 // ASan internally uses some syscalls which non-SFI NaCl disallows. | 5 // ASan internally uses some syscalls which non-SFI NaCl disallows. |
6 // Seccomp-BPF tests die under TSan v2. See http://crbug.com/356588 | 6 // Seccomp-BPF tests die under TSan v2. See http://crbug.com/356588 |
7 #if !defined(ADDRESS_SANITIZER) && !defined(THREAD_SANITIZER) | 7 #if !defined(ADDRESS_SANITIZER) && !defined(THREAD_SANITIZER) |
8 | 8 |
9 #include "components/nacl/loader/nonsfi/nonsfi_sandbox.h" | 9 #include "components/nacl/loader/nonsfi/nonsfi_sandbox.h" |
10 | 10 |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 338 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { |
339 char* next_brk = static_cast<char*>(sbrk(0)) + getpagesize(); | 339 char* next_brk = static_cast<char*>(sbrk(0)) + getpagesize(); |
340 // The kernel interface must return zero for brk. | 340 // The kernel interface must return zero for brk. |
341 BPF_ASSERT_EQ(0, syscall(__NR_brk, next_brk)); | 341 BPF_ASSERT_EQ(0, syscall(__NR_brk, next_brk)); |
342 // The libc wrapper translates it to ENOMEM. | 342 // The libc wrapper translates it to ENOMEM. |
343 errno = 0; | 343 errno = 0; |
344 BPF_ASSERT_EQ(-1, brk(next_brk)); | 344 BPF_ASSERT_EQ(-1, brk(next_brk)); |
345 BPF_ASSERT_EQ(ENOMEM, errno); | 345 BPF_ASSERT_EQ(ENOMEM, errno); |
346 } | 346 } |
347 | 347 |
348 BPF_TEST(NaClNonSfiSandboxTest, epoll_create_EPERM, | 348 // The following test cases check if syscalls return EPERM regardless |
349 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 349 // of arguments. |
350 errno = 0; | 350 #define RESTRICT_SYSCALL_EPERM_TEST(name) \ |
351 BPF_ASSERT_EQ(-1, syscall(__NR_epoll_create)); | 351 BPF_TEST( \ |
352 BPF_ASSERT_EQ(EPERM, errno); | 352 NaClNonSfiSandboxTest, name ## _EPERM, \ |
353 } | 353 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { \ |
| 354 errno = 0; \ |
| 355 BPF_ASSERT_EQ(-1, syscall(__NR_ ## name, 0, 0, 0, 0, 0, 0)); \ |
| 356 BPF_ASSERT_EQ(EPERM, errno); \ |
| 357 } |
354 | 358 |
| 359 RESTRICT_SYSCALL_EPERM_TEST(epoll_create); |
355 #if defined(__i386__) || defined(__arm__) | 360 #if defined(__i386__) || defined(__arm__) |
356 BPF_TEST(NaClNonSfiSandboxTest, getegid32_EPERM, | 361 RESTRICT_SYSCALL_EPERM_TEST(getegid32); |
357 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 362 RESTRICT_SYSCALL_EPERM_TEST(geteuid32); |
358 errno = 0; | 363 RESTRICT_SYSCALL_EPERM_TEST(getgid32); |
359 BPF_ASSERT_EQ(-1, syscall(__NR_getegid32)); | 364 RESTRICT_SYSCALL_EPERM_TEST(getuid32); |
360 BPF_ASSERT_EQ(EPERM, errno); | |
361 } | |
362 | |
363 BPF_TEST(NaClNonSfiSandboxTest, geteuid32_EPERM, | |
364 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
365 errno = 0; | |
366 BPF_ASSERT_EQ(-1, syscall(__NR_geteuid32)); | |
367 BPF_ASSERT_EQ(EPERM, errno); | |
368 } | |
369 | |
370 BPF_TEST(NaClNonSfiSandboxTest, getgid32_EPERM, | |
371 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
372 errno = 0; | |
373 BPF_ASSERT_EQ(-1, syscall(__NR_getgid32)); | |
374 BPF_ASSERT_EQ(EPERM, errno); | |
375 } | |
376 | |
377 BPF_TEST(NaClNonSfiSandboxTest, getuid32_EPERM, | |
378 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
379 errno = 0; | |
380 BPF_ASSERT_EQ(-1, syscall(__NR_getuid32)); | |
381 BPF_ASSERT_EQ(EPERM, errno); | |
382 } | |
383 | |
384 BPF_DEATH_TEST(NaClNonSfiSandboxTest, getegid_SIGSYS, | |
385 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), | |
386 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
387 syscall(__NR_getegid); | |
388 } | |
389 | |
390 BPF_DEATH_TEST(NaClNonSfiSandboxTest, geteuid_SIGSYS, | |
391 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), | |
392 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
393 syscall(__NR_geteuid); | |
394 } | |
395 | |
396 BPF_DEATH_TEST(NaClNonSfiSandboxTest, getgid_SIGSYS, | |
397 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), | |
398 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
399 syscall(__NR_getgid); | |
400 } | |
401 | |
402 BPF_DEATH_TEST(NaClNonSfiSandboxTest, getuid_SIGSYS, | |
403 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), | |
404 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
405 syscall(__NR_getuid); | |
406 } | |
407 #endif | 365 #endif |
408 | 366 RESTRICT_SYSCALL_EPERM_TEST(getegid); |
409 #if defined(__x86_64__) | 367 RESTRICT_SYSCALL_EPERM_TEST(geteuid); |
410 BPF_TEST(NaClNonSfiSandboxTest, getegid_EPERM, | 368 RESTRICT_SYSCALL_EPERM_TEST(getgid); |
411 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 369 RESTRICT_SYSCALL_EPERM_TEST(getuid); |
412 errno = 0; | 370 RESTRICT_SYSCALL_EPERM_TEST(madvise); |
413 BPF_ASSERT_EQ(-1, syscall(__NR_getegid)); | 371 RESTRICT_SYSCALL_EPERM_TEST(open); |
414 BPF_ASSERT_EQ(EPERM, errno); | 372 RESTRICT_SYSCALL_EPERM_TEST(ptrace); |
415 } | 373 RESTRICT_SYSCALL_EPERM_TEST(set_robust_list); |
416 | |
417 BPF_TEST(NaClNonSfiSandboxTest, geteuid_EPERM, | |
418 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
419 errno = 0; | |
420 BPF_ASSERT_EQ(-1, syscall(__NR_geteuid)); | |
421 BPF_ASSERT_EQ(EPERM, errno); | |
422 } | |
423 | |
424 BPF_TEST(NaClNonSfiSandboxTest, getgid_EPERM, | |
425 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
426 errno = 0; | |
427 BPF_ASSERT_EQ(-1, syscall(__NR_getgid)); | |
428 BPF_ASSERT_EQ(EPERM, errno); | |
429 } | |
430 | |
431 BPF_TEST(NaClNonSfiSandboxTest, getuid_EPERM, | |
432 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
433 errno = 0; | |
434 BPF_ASSERT_EQ(-1, syscall(__NR_getuid)); | |
435 BPF_ASSERT_EQ(EPERM, errno); | |
436 } | |
437 #endif | |
438 | |
439 BPF_TEST(NaClNonSfiSandboxTest, madvise_EPERM, | |
440 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
441 errno = 0; | |
442 BPF_ASSERT_EQ(-1, syscall(__NR_madvise)); | |
443 BPF_ASSERT_EQ(EPERM, errno); | |
444 } | |
445 | |
446 BPF_TEST(NaClNonSfiSandboxTest, open_EPERM, | |
447 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
448 errno = 0; | |
449 BPF_ASSERT_EQ(-1, syscall(__NR_open)); | |
450 BPF_ASSERT_EQ(EPERM, errno); | |
451 } | |
452 | |
453 BPF_TEST(NaClNonSfiSandboxTest, ptrace_EPERM, | |
454 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
455 errno = 0; | |
456 BPF_ASSERT_EQ(-1, syscall(__NR_ptrace)); | |
457 BPF_ASSERT_EQ(EPERM, errno); | |
458 } | |
459 | |
460 BPF_TEST(NaClNonSfiSandboxTest, set_robust_list_EPERM, | |
461 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
462 errno = 0; | |
463 BPF_ASSERT_EQ(-1, syscall(__NR_set_robust_list)); | |
464 BPF_ASSERT_EQ(EPERM, errno); | |
465 } | |
466 | |
467 #if defined(__i386__) || defined(__x86_64__) | 374 #if defined(__i386__) || defined(__x86_64__) |
468 BPF_TEST(NaClNonSfiSandboxTest, time_EPERM, | 375 RESTRICT_SYSCALL_EPERM_TEST(time); |
469 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
470 errno = 0; | |
471 BPF_ASSERT_EQ(-1, syscall(__NR_time)); | |
472 BPF_ASSERT_EQ(EPERM, errno); | |
473 } | |
474 #endif | 376 #endif |
475 | 377 |
476 } // namespace | 378 } // namespace |
477 | 379 |
478 #endif // !ADDRESS_SANITIZER && !THREAD_SANITIZER | 380 #endif // !ADDRESS_SANITIZER && !THREAD_SANITIZER |
OLD | NEW |