From 1ba794f73ddab81d438b56ebe54c20b1ca8b950b Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Wed, 31 Aug 2022 17:33:43 +0200 Subject: [PATCH] rustup --- rust-version | 2 +- tests/fail/invalid_int.rs | 1 + tests/fail/validity/uninit_float.rs | 5 +++-- tests/fail/validity/uninit_float.stderr | 6 +++--- tests/fail/validity/uninit_integer.rs | 4 +++- tests/fail/validity/uninit_integer.stderr | 6 +++--- tests/fail/validity/uninit_raw_ptr.rs | 5 ++++- tests/fail/validity/uninit_raw_ptr.stderr | 6 +++--- 8 files changed, 21 insertions(+), 14 deletions(-) diff --git a/rust-version b/rust-version index f7e2fa5a33..0909f24752 100644 --- a/rust-version +++ b/rust-version @@ -1 +1 @@ -94b2b15e63c5d2b2a6a0910e3dae554ce9415bf9 +4fd4de7ea358ad6fc28c5780533ea8ccc09e1006 diff --git a/tests/fail/invalid_int.rs b/tests/fail/invalid_int.rs index b51af24c13..2435a87a6f 100644 --- a/tests/fail/invalid_int.rs +++ b/tests/fail/invalid_int.rs @@ -1,3 +1,4 @@ +#![allow(invalid_value)] // Validation makes this fail in the wrong place // Make sure we find these even with many checks disabled. //@compile-flags: -Zmiri-disable-alignment-check -Zmiri-disable-stacked-borrows -Zmiri-disable-validation diff --git a/tests/fail/validity/uninit_float.rs b/tests/fail/validity/uninit_float.rs index fecc02d7a5..045bb46464 100644 --- a/tests/fail/validity/uninit_float.rs +++ b/tests/fail/validity/uninit_float.rs @@ -1,8 +1,9 @@ -#![allow(deprecated)] +#![allow(deprecated, invalid_value)] // This test is adapted from https://github.com/rust-lang/miri/issues/1340#issue-600900312. fn main() { // Deliberately using `mem::uninitialized` to make sure that despite all the mitigations, we consider this UB. - let _val: f32 = unsafe { std::mem::uninitialized() }; + // The array avoids a `Scalar` layout which detects uninit without even doing validation. + let _val: [f32; 1] = unsafe { std::mem::uninitialized() }; //~^ ERROR: uninitialized } diff --git a/tests/fail/validity/uninit_float.stderr b/tests/fail/validity/uninit_float.stderr index 8a677202c8..f3278b00e6 100644 --- a/tests/fail/validity/uninit_float.stderr +++ b/tests/fail/validity/uninit_float.stderr @@ -1,8 +1,8 @@ -error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory +error: Undefined Behavior: constructing invalid value at .value[0]: encountered uninitialized bytes --> $DIR/uninit_float.rs:LL:CC | -LL | let _val: f32 = unsafe { std::mem::uninitialized() }; - | ^^^^^^^^^^^^^^^^^^^^^^^^^ using uninitialized data, but this operation requires initialized memory +LL | let _val: [f32; 1] = unsafe { std::mem::uninitialized() }; + | ^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .value[0]: encountered uninitialized bytes | = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information diff --git a/tests/fail/validity/uninit_integer.rs b/tests/fail/validity/uninit_integer.rs index a9b2007326..a94302603a 100644 --- a/tests/fail/validity/uninit_integer.rs +++ b/tests/fail/validity/uninit_integer.rs @@ -1,6 +1,8 @@ +#![allow(invalid_value)] // This test is from https://github.com/rust-lang/miri/issues/1340#issue-600900312. fn main() { - let _val = unsafe { std::mem::MaybeUninit::::uninit().assume_init() }; + // The array avoids a `Scalar` layout which detects uninit without even doing validation. + let _val = unsafe { std::mem::MaybeUninit::<[usize; 1]>::uninit().assume_init() }; //~^ ERROR: uninitialized } diff --git a/tests/fail/validity/uninit_integer.stderr b/tests/fail/validity/uninit_integer.stderr index 60bf2c7366..437e237ac8 100644 --- a/tests/fail/validity/uninit_integer.stderr +++ b/tests/fail/validity/uninit_integer.stderr @@ -1,8 +1,8 @@ -error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory +error: Undefined Behavior: constructing invalid value at .value[0]: encountered uninitialized bytes --> $DIR/uninit_integer.rs:LL:CC | -LL | let _val = unsafe { std::mem::MaybeUninit::::uninit().assume_init() }; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ using uninitialized data, but this operation requires initialized memory +LL | let _val = unsafe { std::mem::MaybeUninit::<[usize; 1]>::uninit().assume_init() }; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .value[0]: encountered uninitialized bytes | = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information diff --git a/tests/fail/validity/uninit_raw_ptr.rs b/tests/fail/validity/uninit_raw_ptr.rs index 9f99dc1a0e..18703152ea 100644 --- a/tests/fail/validity/uninit_raw_ptr.rs +++ b/tests/fail/validity/uninit_raw_ptr.rs @@ -1,4 +1,7 @@ +#![allow(invalid_value)] + fn main() { - let _val = unsafe { std::mem::MaybeUninit::<*const u8>::uninit().assume_init() }; + // The array avoids a `Scalar` layout which detects uninit without even doing validation. + let _val = unsafe { std::mem::MaybeUninit::<[*const u8; 1]>::uninit().assume_init() }; //~^ ERROR: uninitialized } diff --git a/tests/fail/validity/uninit_raw_ptr.stderr b/tests/fail/validity/uninit_raw_ptr.stderr index efa4442292..1267fcced1 100644 --- a/tests/fail/validity/uninit_raw_ptr.stderr +++ b/tests/fail/validity/uninit_raw_ptr.stderr @@ -1,8 +1,8 @@ -error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory +error: Undefined Behavior: constructing invalid value at .value[0]: encountered uninitialized memory, but expected a raw pointer --> $DIR/uninit_raw_ptr.rs:LL:CC | -LL | let _val = unsafe { std::mem::MaybeUninit::<*const u8>::uninit().assume_init() }; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ using uninitialized data, but this operation requires initialized memory +LL | let _val = unsafe { std::mem::MaybeUninit::<[*const u8; 1]>::uninit().assume_init() }; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .value[0]: encountered uninitialized memory, but expected a raw pointer | = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information