mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-20 02:43:45 +00:00
Only use clone3
when needed for pidfd
In #89522 we learned that `clone3` is interacting poorly with Gentoo's `sandbox` tool. We only need that for the unstable pidfd extensions, so otherwise avoid that and use a normal `fork`.
This commit is contained in:
parent
045612b8b9
commit
85b55ce00d
@ -166,6 +166,10 @@ impl Command {
|
|||||||
fn clone3(cl_args: *mut clone_args, len: libc::size_t) -> libc::c_long
|
fn clone3(cl_args: *mut clone_args, len: libc::size_t) -> libc::c_long
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bypassing libc for `clone3` can make further libc calls unsafe,
|
||||||
|
// so we use it sparingly for now. See #89522 for details.
|
||||||
|
let want_clone3_pidfd = self.get_create_pidfd();
|
||||||
|
|
||||||
// If we fail to create a pidfd for any reason, this will
|
// If we fail to create a pidfd for any reason, this will
|
||||||
// stay as -1, which indicates an error.
|
// stay as -1, which indicates an error.
|
||||||
let mut pidfd: pid_t = -1;
|
let mut pidfd: pid_t = -1;
|
||||||
@ -173,14 +177,9 @@ impl Command {
|
|||||||
// Attempt to use the `clone3` syscall, which supports more arguments
|
// Attempt to use the `clone3` syscall, which supports more arguments
|
||||||
// (in particular, the ability to create a pidfd). If this fails,
|
// (in particular, the ability to create a pidfd). If this fails,
|
||||||
// we will fall through this block to a call to `fork()`
|
// we will fall through this block to a call to `fork()`
|
||||||
if HAS_CLONE3.load(Ordering::Relaxed) {
|
if want_clone3_pidfd && HAS_CLONE3.load(Ordering::Relaxed) {
|
||||||
let mut flags = 0;
|
|
||||||
if self.get_create_pidfd() {
|
|
||||||
flags |= CLONE_PIDFD;
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut args = clone_args {
|
let mut args = clone_args {
|
||||||
flags,
|
flags: CLONE_PIDFD,
|
||||||
pidfd: &mut pidfd as *mut pid_t as u64,
|
pidfd: &mut pidfd as *mut pid_t as u64,
|
||||||
child_tid: 0,
|
child_tid: 0,
|
||||||
parent_tid: 0,
|
parent_tid: 0,
|
||||||
|
Loading…
Reference in New Issue
Block a user