From: Christian Poveda Date: Wed, 28 Aug 2019 22:20:50 +0000 (-0500) Subject: Add -Zmiri-env-exclude flag X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=1ae1d71938e2a177f3edb60fc30991ce2c8e4536;p=rust.git Add -Zmiri-env-exclude flag --- diff --git a/README.md b/README.md index d3e4adfa178..3cc4872eb7f 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,8 @@ Several `-Z` flags are relevant for Miri: * `-Zmiri-disable-isolation` disables host host isolation. As a consequence, the program has access to host resources such as environment variables and randomness (and, eventually, file systems and more). +* `-Zmiri-env-exclude=` keeps the `var` environment variable isolated from + the host. It can be used multiple times to exclude several variables. * `-Zmir-opt-level` controls how many MIR optimizations are performed. Miri overrides the default to be `0`; be advised that using any higher level can make Miri miss bugs in your program because they got optimized away. diff --git a/src/bin/miri-rustc-tests.rs b/src/bin/miri-rustc-tests.rs index 9ef64c38638..f8bd92afbec 100644 --- a/src/bin/miri-rustc-tests.rs +++ b/src/bin/miri-rustc-tests.rs @@ -51,6 +51,7 @@ fn visit_item(&mut self, i: &'hir hir::Item) { let config = MiriConfig { validate: true, communicate: false, + excluded_env_vars: vec![], args: vec![], seed: None, }; diff --git a/src/bin/miri.rs b/src/bin/miri.rs index 55522a52e01..6e4bf4a6c26 100644 --- a/src/bin/miri.rs +++ b/src/bin/miri.rs @@ -135,6 +135,7 @@ fn main() { let mut rustc_args = vec![]; let mut miri_args = vec![]; let mut after_dashdash = false; + let mut excluded_env_vars = vec![]; for arg in std::env::args() { if rustc_args.is_empty() { // Very first arg: for `rustc`. @@ -175,6 +176,9 @@ fn main() { seed = Some(u64::from_be_bytes(bytes)); }, + arg if arg.starts_with("-Zmiri-env-exclude=") => { + excluded_env_vars.push(arg.trim_start_matches("-Zmiri-env-exclude=").to_owned()); + }, _ => { rustc_args.push(arg); } @@ -200,7 +204,13 @@ fn main() { debug!("rustc arguments: {:?}", rustc_args); debug!("miri arguments: {:?}", miri_args); - let miri_config = miri::MiriConfig { validate, communicate, args: miri_args, seed }; + let miri_config = miri::MiriConfig { + validate, + communicate, + excluded_env_vars, + seed, + args: miri_args, + }; let result = rustc_driver::report_ices_to_stderr_if_any(move || { rustc_driver::run_compiler(&rustc_args, &mut MiriCompilerCalls { miri_config }, None, None) }).and_then(|result| result); diff --git a/src/eval.rs b/src/eval.rs index bd4d8a0bef8..463f21d30ec 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -22,6 +22,8 @@ pub struct MiriConfig { pub validate: bool, /// Determines if communication with the host environment is enabled. pub communicate: bool, + /// Environment variables that should always be isolated from the host. + pub excluded_env_vars: Vec, pub args: Vec, /// The seed to use when non-determinism or randomness are required (e.g. ptr-to-int cast, `getrandom()`). pub seed: Option,