diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index efd35d15d3..ffb629d97f 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -1483,6 +1483,13 @@ impl Pal for Sys { let start_fd = child.thr_fd.dup_into_upper(b"start")?; start_fd.write(&[0])?; + // The kernel does not keep a self-reference to the new context's thread + // fd. If the parent closes its handle before the child reads AT_REDOX_THR_FD + // from auxv and creates its own reference, the child thread object is + // destroyed and the dynamic linker panics trying to open regs/env. Until + // the kernel holds a reference per context, leak the parent handle. + let _ = child.thr_fd.take(); + Ok(pid_t::try_from(child.pid).unwrap()) }