| Index: sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
 | 
| diff --git a/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc b/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
 | 
| index c72b53adcb2607f9443ed3321abfab02b096ec50..508ae3ebf91176592073a27cb5883c455ec053a1 100644
 | 
| --- a/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
 | 
| +++ b/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
 | 
| @@ -6,8 +6,10 @@
 | 
|  
 | 
|  #include <errno.h>
 | 
|  #include <sys/mman.h>
 | 
| -#include <sys/types.h>
 | 
|  #include <sys/socket.h>
 | 
| +#include <sys/syscall.h>
 | 
| +#include <sys/types.h>
 | 
| +#include <unistd.h>
 | 
|  
 | 
|  #include "base/logging.h"
 | 
|  #include "build/build_config.h"
 | 
| @@ -42,7 +44,6 @@ bool IsBaselinePolicyAllowed(int sysno) {
 | 
|  #if defined(__arm__)
 | 
|           SyscallSets::IsArmPrivate(sysno) ||
 | 
|  #endif
 | 
| -         SyscallSets::IsKill(sysno) ||
 | 
|           SyscallSets::IsAllowedOperationOnFd(sysno);
 | 
|  }
 | 
|  
 | 
| @@ -63,6 +64,7 @@ bool IsBaselinePolicyWatched(int sysno) {
 | 
|           SyscallSets::IsInotify(sysno) ||
 | 
|           SyscallSets::IsKernelModule(sysno) ||
 | 
|           SyscallSets::IsKeyManagement(sysno) ||
 | 
| +         SyscallSets::IsKill(sysno) ||
 | 
|           SyscallSets::IsMessageQueue(sysno) ||
 | 
|           SyscallSets::IsMisc(sysno) ||
 | 
|  #if defined(__x86_64__)
 | 
| @@ -80,7 +82,9 @@ bool IsBaselinePolicyWatched(int sysno) {
 | 
|  }
 | 
|  
 | 
|  // |fs_denied_errno| is the errno return for denied filesystem access.
 | 
| -ErrorCode EvaluateSyscallImpl(int fs_denied_errno, SandboxBPF* sandbox,
 | 
| +ErrorCode EvaluateSyscallImpl(int fs_denied_errno,
 | 
| +                              pid_t current_pid,
 | 
| +                              SandboxBPF* sandbox,
 | 
|                                int sysno) {
 | 
|    if (IsBaselinePolicyAllowed(sysno)) {
 | 
|      return ErrorCode(ErrorCode::ERR_ALLOWED);
 | 
| @@ -125,6 +129,10 @@ ErrorCode EvaluateSyscallImpl(int fs_denied_errno, SandboxBPF* sandbox,
 | 
|      return RestrictFcntlCommands(sandbox);
 | 
|  #endif
 | 
|  
 | 
| +  if (SyscallSets::IsKill(sysno)) {
 | 
| +    return RestrictKillTarget(current_pid, sandbox, sysno);
 | 
| +  }
 | 
| +
 | 
|    if (SyscallSets::IsFileSystem(sysno) ||
 | 
|        SyscallSets::IsCurrentDirectory(sysno)) {
 | 
|      return ErrorCode(fs_denied_errno);
 | 
| @@ -151,6 +159,7 @@ ErrorCode EvaluateSyscallImpl(int fs_denied_errno, SandboxBPF* sandbox,
 | 
|      // be denied gracefully right away.
 | 
|      return sandbox->Trap(CrashSIGSYS_Handler, NULL);
 | 
|    }
 | 
| +
 | 
|    // In any other case crash the program with our SIGSYS handler.
 | 
|    return sandbox->Trap(CrashSIGSYS_Handler, NULL);
 | 
|  }
 | 
| @@ -160,16 +169,24 @@ ErrorCode EvaluateSyscallImpl(int fs_denied_errno, SandboxBPF* sandbox,
 | 
|  // Unfortunately C++03 doesn't allow delegated constructors.
 | 
|  // Call other constructor when C++11 lands.
 | 
|  BaselinePolicy::BaselinePolicy()
 | 
| -    : fs_denied_errno_(EPERM) {}
 | 
| +    : fs_denied_errno_(EPERM), current_pid_(syscall(__NR_getpid)) {}
 | 
|  
 | 
|  BaselinePolicy::BaselinePolicy(int fs_denied_errno)
 | 
| -    : fs_denied_errno_(fs_denied_errno) {}
 | 
| +    : fs_denied_errno_(fs_denied_errno), current_pid_(syscall(__NR_getpid)) {}
 | 
|  
 | 
| -BaselinePolicy::~BaselinePolicy() {}
 | 
| +BaselinePolicy::~BaselinePolicy() {
 | 
| +  // Make sure that this policy is created, used and destroyed by a single
 | 
| +  // process.
 | 
| +  DCHECK_EQ(syscall(__NR_getpid), current_pid_);
 | 
| +}
 | 
|  
 | 
|  ErrorCode BaselinePolicy::EvaluateSyscall(SandboxBPF* sandbox,
 | 
|                                            int sysno) const {
 | 
| -  return EvaluateSyscallImpl(fs_denied_errno_, sandbox, sysno);
 | 
| +  // Make sure that this policy is used in the creating process.
 | 
| +  if (1 == sysno) {
 | 
| +    DCHECK_EQ(syscall(__NR_getpid), current_pid_);
 | 
| +  }
 | 
| +  return EvaluateSyscallImpl(fs_denied_errno_, current_pid_, sandbox, sysno);
 | 
|  }
 | 
|  
 | 
|  }  // namespace sandbox.
 | 
| 
 |