diff options
Diffstat (limited to 'sandbox/linux/seccomp/exit.cc')
-rw-r--r-- | sandbox/linux/seccomp/exit.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/sandbox/linux/seccomp/exit.cc b/sandbox/linux/seccomp/exit.cc new file mode 100644 index 0000000..f4db643 --- /dev/null +++ b/sandbox/linux/seccomp/exit.cc @@ -0,0 +1,38 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "debug.h" +#include "sandbox_impl.h" + +namespace playground { + +long Sandbox::sandbox_exit(int status) { + long long tm; + Debug::syscall(&tm, __NR_exit, "Executing handler"); + struct { + int sysnum; + long long cookie; + } __attribute__((packed)) request; + request.sysnum = __NR_exit; + request.cookie = cookie(); + + SysCalls sys; + if (write(sys, processFdPub(), &request, sizeof(request)) != + sizeof(request)) { + die("Failed to forward exit() request [sandbox]"); + } + for (;;) { + sys._exit(status); + } +} + +bool Sandbox::process_exit(int parentMapsFd, int sandboxFd, int threadFdPub, + int threadFd, SecureMem::Args* mem) { + SecureMem::lockSystemCall(parentMapsFd, mem); + SecureMem::sendSystemCall(threadFdPub, true, parentMapsFd, mem, + __NR_exit, 0); + return true; +} + +} // namespace |