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 |