diff --git a/src/libstd/sys/redox/process.rs b/src/libstd/sys/redox/process.rs index b867dccad454b1636b26dd537c482149fc3854f2..de442c37d2d8ac4ece00a1a98920917bc1051223 100644 --- a/src/libstd/sys/redox/process.rs +++ b/src/libstd/sys/redox/process.rs @@ -315,7 +315,7 @@ macro_rules! t { }; let fd = if let Some(program) = program_opt { - t!(cvt(syscall::open(program.as_os_str().as_bytes(), syscall::O_RDONLY))) + t!(cvt(syscall::open(program.as_os_str().as_bytes(), syscall::O_RDONLY | syscall::O_CLOEXEC))) } else { return io::Error::from_raw_os_error(syscall::ENOENT); }; @@ -340,6 +340,7 @@ macro_rules! t { } if let Err(err) = syscall::fexec(fd, &args, &vars) { + let _ = syscall::close(fd); io::Error::from_raw_os_error(err.errno as i32) } else { panic!("return from exec without err");