| Index: sandbox/linux/services/syscall_wrappers.h
|
| diff --git a/sandbox/linux/services/syscall_wrappers.h b/sandbox/linux/services/syscall_wrappers.h
|
| index 64028f7d0f6d61316566ad20b1f8a260128f3f8b..2001f38f40b4f8d6dd1babc3e0bdca7cfc01f31e 100644
|
| --- a/sandbox/linux/services/syscall_wrappers.h
|
| +++ b/sandbox/linux/services/syscall_wrappers.h
|
| @@ -16,7 +16,7 @@ namespace sandbox {
|
|
|
| // Provide direct system call wrappers for a few common system calls.
|
| // These are guaranteed to perform a system call and do not rely on things such
|
| -// as caching the current pid (c.f. getpid()).
|
| +// as caching the current pid (c.f. getpid()) unless otherwise specified.
|
|
|
| SANDBOX_EXPORT pid_t sys_getpid(void);
|
|
|
| @@ -24,13 +24,27 @@ SANDBOX_EXPORT pid_t sys_gettid(void);
|
|
|
| SANDBOX_EXPORT long sys_clone(unsigned long flags);
|
|
|
| -// |regs| is not supported and must be passed as nullptr.
|
| +// |regs| is not supported and must be passed as nullptr. |child_stack| must be
|
| +// nullptr, since otherwise this function cannot safely return. As a
|
| +// consequence, this function does not support CLONE_VM.
|
| SANDBOX_EXPORT long sys_clone(unsigned long flags,
|
| - void* child_stack,
|
| + decltype(nullptr) child_stack,
|
| pid_t* ptid,
|
| pid_t* ctid,
|
| decltype(nullptr) regs);
|
|
|
| +// A wrapper for clone with fork-like behavior, meaning that it returns the
|
| +// child's pid in the parent and 0 in the child. |flags|, |ptid|, and |ctid| are
|
| +// as in the clone system call (the CLONE_VM flag is not supported).
|
| +//
|
| +// This function uses the libc clone wrapper (which updates libc's pid cache)
|
| +// internally, so callers may expect things like getpid() to work correctly
|
| +// after in both the child and parent. An exception is when this code is run
|
| +// under Valgrind. Valgrind does not support the libc clone wrapper, so the libc
|
| +// pid cache may be incorrect after this function is called under Valgrind.
|
| +SANDBOX_EXPORT pid_t
|
| +ForkWithFlags(unsigned long flags, pid_t* ptid, pid_t* ctid);
|
| +
|
| SANDBOX_EXPORT void sys_exit_group(int status);
|
|
|
| // The official system call takes |args| as void* (in order to be extensible),
|
|
|