Rollup merge of #94749 - RalfJung:remove-dir-all-miri, r=cuviper
remove_dir_all: use fallback implementation on Miri Fixes https://github.com/rust-lang/miri/issues/1966 The new implementation requires `openat`, `unlinkat`, and `fdopendir`. These cannot easily be shimmed in Miri since libstd does not expose APIs corresponding to them. So for now it is probably easiest to just use the fallback code in Miri. Nobody should run Miri as root anyway...
This commit is contained in:
commit
acb7ed141b
2 changed files with 7 additions and 6 deletions
|
@ -2049,9 +2049,10 @@ pub fn remove_dir<P: AsRef<Path>>(path: P) -> io::Result<()> {
|
|||
///
|
||||
/// [changes]: io#platform-specific-behavior
|
||||
///
|
||||
/// On macOS before version 10.10 and REDOX this function is not protected against time-of-check to
|
||||
/// time-of-use (TOCTOU) race conditions, and should not be used in security-sensitive code on
|
||||
/// those platforms. All other platforms are protected.
|
||||
/// On macOS before version 10.10 and REDOX, as well as when running in Miri for any target, this
|
||||
/// function is not protected against time-of-check to time-of-use (TOCTOU) race conditions, and
|
||||
/// should not be used in security-sensitive code on those platforms. All other platforms are
|
||||
/// protected.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
|
|
|
@ -1517,14 +1517,14 @@ pub fn chroot(dir: &Path) -> io::Result<()> {
|
|||
|
||||
pub use remove_dir_impl::remove_dir_all;
|
||||
|
||||
// Fallback for REDOX and ESP-IDF
|
||||
#[cfg(any(target_os = "redox", target_os = "espidf"))]
|
||||
// Fallback for REDOX and ESP-IDF (and Miri)
|
||||
#[cfg(any(target_os = "redox", target_os = "espidf", miri))]
|
||||
mod remove_dir_impl {
|
||||
pub use crate::sys_common::fs::remove_dir_all;
|
||||
}
|
||||
|
||||
// Modern implementation using openat(), unlinkat() and fdopendir()
|
||||
#[cfg(not(any(target_os = "redox", target_os = "espidf")))]
|
||||
#[cfg(not(any(target_os = "redox", target_os = "espidf", miri)))]
|
||||
mod remove_dir_impl {
|
||||
use super::{cstr, lstat, Dir, DirEntry, InnerReadDir, ReadDir};
|
||||
use crate::ffi::CStr;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue