Chromium Code Reviews| Index: sandbox/linux/seccomp-bpf/sandbox_bpf_unittest.cc |
| diff --git a/sandbox/linux/seccomp-bpf/sandbox_bpf_unittest.cc b/sandbox/linux/seccomp-bpf/sandbox_bpf_unittest.cc |
| index 0ce508be9c7eafbb49a4d632682df9a4715a72e2..610d0cbf2de26b5d15204d6065b81d9ec4801ff0 100644 |
| --- a/sandbox/linux/seccomp-bpf/sandbox_bpf_unittest.cc |
| +++ b/sandbox/linux/seccomp-bpf/sandbox_bpf_unittest.cc |
| @@ -2261,6 +2261,68 @@ SANDBOX_DEATH_TEST(SandboxBPF, StartSingleThreadedAsMultiThreaded, |
| } |
| #endif // !defined(THREAD_SANITIZER) |
| +intptr_t NopHandler(const struct arch_seccomp_data& args, void*) { |
|
jln (very slow on Chromium)
2014/08/29 20:40:05
Maybe NoOp rather than Nop? And/Or add a comment.
leecam
2014/08/29 22:56:31
Done.
|
| + return -1; |
| +} |
| + |
| +class UnsafeTrapWithCondPolicy : public SandboxBPFPolicy { |
| + public: |
| + UnsafeTrapWithCondPolicy() {} |
| + virtual ErrorCode EvaluateSyscall(SandboxBPF* sandbox, |
| + int sysno) const OVERRIDE { |
| + DCHECK(SandboxBPF::IsValidSyscallNumber(sysno)); |
| + setenv(kSandboxDebuggingEnv, "t", 0); |
| + Die::SuppressInfoMessages(true); |
| + |
| + if (sysno == __NR_rt_sigprocmask || sysno == __NR_rt_sigreturn |
|
jln (very slow on Chromium)
2014/08/29 20:40:05
Should we export a "IsRequiredForUnsafeTrapsSyscal
leecam
2014/08/29 22:56:31
Done.
|
| +#if defined(__NR_sigprocmask) |
| + || |
| + sysno == __NR_sigprocmask |
| +#endif |
| +#if defined(__NR_sigreturn) |
| + || |
| + sysno == __NR_sigreturn |
| +#endif |
| + ) { |
| + return ErrorCode(ErrorCode::ERR_ALLOWED); |
| + } |
| + switch (sysno) { |
| + case __NR_setuid: |
| + return sandbox->Cond(0, |
| + ErrorCode::TP_32BIT, |
| + ErrorCode::OP_EQUAL, |
| + 100, |
| + ErrorCode(ErrorCode::ERR_ALLOWED), |
| + ErrorCode(EPERM)); |
| + case __NR_setgid: |
| + return sandbox->Cond(0, |
| + ErrorCode::TP_32BIT, |
| + ErrorCode::OP_EQUAL, |
| + 100, |
| + ErrorCode(ErrorCode::ERR_ALLOWED), |
| + sandbox->Cond(0, |
| + ErrorCode::TP_32BIT, |
| + ErrorCode::OP_EQUAL, |
| + 200, |
| + ErrorCode(ENOSYS), |
| + ErrorCode(EPERM))); |
| + case __NR_exit_group: |
| + return ErrorCode(ErrorCode::ERR_ALLOWED); |
| + case __NR_getppid: |
| + return sandbox->UnsafeTrap(NopHandler, NULL); |
| + default: |
| + return ErrorCode(EPERM); |
| + } |
| + } |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(UnsafeTrapWithCondPolicy); |
| +}; |
| + |
| +BPF_TEST_C(SandboxBPF, UnsafeTrapWithCond, UnsafeTrapWithCondPolicy) { |
| + // Nothing to do, just ensuring policy compiles and verifies. |
|
jln (very slow on Chromium)
2014/08/29 20:40:05
It would be worth checking that the policy does wh
leecam
2014/08/29 22:56:31
Done.
|
| +} |
| + |
| } // namespace |
| } // namespace sandbox |