Chromium Code Reviews| 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 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 298 MAP_ANONYMOUS | MAP_POPULATE, -1, 0); | 298 MAP_ANONYMOUS | MAP_POPULATE, -1, 0); |
| 299 } | 299 } |
| 300 | 300 |
| 301 BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_unallowed_prot, | 301 BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_unallowed_prot, |
| 302 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), | 302 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), |
| 303 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 303 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { |
| 304 mmap(NULL, getpagesize(), PROT_READ | PROT_GROWSDOWN, | 304 mmap(NULL, getpagesize(), PROT_READ | PROT_GROWSDOWN, |
| 305 MAP_ANONYMOUS, -1, 0); | 305 MAP_ANONYMOUS, -1, 0); |
| 306 } | 306 } |
| 307 | 307 |
| 308 // TODO(hamaji): Disallow RWX mmap. | 308 BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_exec, |
| 309 #if 0 | 309 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), |
| 310 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | |
| 311 mmap(NULL, getpagesize(), PROT_EXEC, MAP_ANONYMOUS, -1, 0); | |
| 312 } | |
|
jln (very slow on Chromium)
2014/04/24 16:46:38
Do you mind adding another test with PROT_EXEC | P
hamaji
2014/04/25 01:44:47
Added cases for RX and WX.
| |
| 313 | |
| 310 BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_rwx, | 314 BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_rwx, |
| 311 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), | 315 DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()), |
| 312 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 316 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { |
| 313 mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC, | 317 mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC, |
| 314 MAP_ANONYMOUS, -1, 0); | 318 MAP_ANONYMOUS, -1, 0); |
| 315 } | 319 } |
| 316 #endif | |
| 317 | 320 |
| 318 BPF_TEST(NaClNonSfiSandboxTest, mprotect_allowed, | 321 BPF_TEST(NaClNonSfiSandboxTest, mprotect_allowed, |
| 319 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 322 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { |
| 320 void* ptr = DoAllowedAnonymousMmap(); | 323 void* ptr = DoAllowedAnonymousMmap(); |
| 321 BPF_ASSERT_NE(MAP_FAILED, ptr); | 324 BPF_ASSERT_NE(MAP_FAILED, ptr); |
| 322 BPF_ASSERT_EQ(0, mprotect(ptr, getpagesize(), PROT_READ)); | 325 BPF_ASSERT_EQ(0, mprotect(ptr, getpagesize(), PROT_READ)); |
| 323 BPF_ASSERT_EQ(0, munmap(ptr, getpagesize())); | 326 BPF_ASSERT_EQ(0, munmap(ptr, getpagesize())); |
| 324 } | 327 } |
| 325 | 328 |
| 326 BPF_DEATH_TEST(NaClNonSfiSandboxTest, mprotect_unallowed_prot, | 329 BPF_DEATH_TEST(NaClNonSfiSandboxTest, mprotect_unallowed_prot, |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { | 465 nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) { |
| 463 errno = 0; | 466 errno = 0; |
| 464 BPF_ASSERT_EQ(-1, syscall(__NR_time)); | 467 BPF_ASSERT_EQ(-1, syscall(__NR_time)); |
| 465 BPF_ASSERT_EQ(EPERM, errno); | 468 BPF_ASSERT_EQ(EPERM, errno); |
| 466 } | 469 } |
| 467 #endif | 470 #endif |
| 468 | 471 |
| 469 } // namespace | 472 } // namespace |
| 470 | 473 |
| 471 #endif // !ADDRESS_SANITIZER && !THREAD_SANITIZER | 474 #endif // !ADDRESS_SANITIZER && !THREAD_SANITIZER |
| OLD | NEW |