Fix fd_renumber when trying to renumber a preopen

This commit is contained in:
Jakub Konka
2019-06-13 19:35:52 +02:00
committed by Dan Gohman
parent a11f2b1d3a
commit 7fef91c1e4

View File

@@ -78,6 +78,14 @@ pub(crate) fn fd_renumber(
Some(fe_to) => fe_to,
None => return Err(host::__WASI_EBADF),
};
// Don't allow renumbering over a pre-opened resource.
// TODO: Eventually, we do want to permit this, once libpreopen in
// userspace is capable of removing entries from its tables as well.
if fe_from.preopen_path.is_some() || fe_to.preopen_path.is_some() {
return Err(host::__WASI_ENOTSUP);
}
if let Err(e) = nix::unistd::dup2(fe_from.fd_object.rawfd, fe_to.fd_object.rawfd) {
return Err(host_impl::errno_from_nix(e.as_errno().unwrap()));
}