Commit Graph

580 Commits

Author SHA1 Message Date
Oli Scherer 8acfbc3b33 Update all tests 2022-05-25 18:26:33 +00:00
Ralf Jung 8c42ef1dee enable number validity checking and ptr::invalid checking by default 2022-05-25 16:17:41 +02:00
Oli Scherer f1756c3ddd Add a custom ui test runner and move all tests to it 2022-05-25 13:31:26 +00:00
Ralf Jung fcf3bc2335 with permissive-provenance set, we already treat ptr::invalid correctly 2022-05-24 17:49:11 +02:00
Ralf Jung 42d5e5bf96 move some tests to more suitable locations 2022-05-23 12:19:42 +02:00
Ralf Jung 6e7a8c017a move some compile-fail tests to a more appropriate location 2022-05-23 11:28:33 +02:00
carbotaniuman f7bc441fd3 Initial work on permissive provenance 2022-05-23 09:07:31 +02:00
Ralf Jung 8b4d613cc8 rustup 2022-05-20 18:37:57 +02:00
Ralf Jung 092c2b9d92 change one of the ref-to-uninhbaited tests to Box 2022-05-18 08:32:38 +02:00
Ralf Jung 30548bb57e test for validity of references pointing to uninhabited types 2022-05-18 08:32:38 +02:00
Ralf Jung d585b92fe3 test for "erroneous constant used" post-monomorphization error 2022-05-08 17:56:09 +02:00
David Tolnay b994148714 Clean up all trailing whitespace 2022-04-30 10:40:35 -07:00
Ralf Jung a0ac13d8a1 gracefully handle type-too-large layout errors 2022-04-30 17:09:44 +02:00
Ralf Jung 432015d1f6 rustup 2022-04-20 17:46:31 -04:00
Ralf Jung cac48dd734 treat prctl like a variadic function 2022-04-07 16:20:19 -04:00
Ralf Jung 3dcba56349 add test for nasty example 2022-04-02 00:05:27 -04:00
bors 732461b4cd Auto merge of #2045 - RalfJung:strict-provenance, r=RalfJung
add -Zmiri-strict-provenance

This implements [strict provenance](https://github.com/rust-lang/rust/issues/95228) in Miri. The only change is that casting an integer to a pointer does not even attempt to produce a good provenance for the given address; instead, it always uses the invalid provenance. This stricter than even `-Zmiri-tag-raw-pointers` in that it also rejects the following example (which does not even involve Stacked Borrows):
```rust
fn main() {
    let x = 22;
    let ptr = &x as *const _ as *const u8;
    let roundtrip = ptr as usize as *const u8;
    let _ = unsafe { roundtrip.offset(1) };
}
```
The new flag also implies `-Zmiri-tag-raw-pointers` since the only reason one would *not* want to tag raw pointers is to support ptr-int-ptr roundtrips.

Note that the flag does *not* check against ptr-to-int *transmutes*; that still requires `-Zmiri-check-number-validity`. You can also check for strict provenance *without* Stacked Borrows by adding `-Zmiri-disable-stacked-borrows`.

The new "Miri hard mode" flags for maximal checking are `-Zmiri-strict-provenance -Zmiri-check-number-validity`. (Add `-Zmiri-symbolic-alignment-check` if you feel extra spicy today.)
2022-04-01 22:40:26 +00:00
Ralf Jung aa04dc1eeb Rust values can be up to isize::MAX in size 2022-04-01 17:22:01 -04:00
Ralf Jung 9af03bf342 add -Zmiri-strict-provenance 2022-04-01 14:10:24 -04:00
Ralf Jung ede470e1fc ensure that -Zmiri-check-number-validity detects integers with provenance 2022-03-26 14:33:13 -04:00
Ralf Jung 9772c85ebc another test for too big type 2022-03-26 11:08:11 -04:00
Ralf Jung 3275df31ea rustup 2022-03-24 10:06:33 -04:00
bors 57786678d4 Auto merge of #1975 - DrMeepster:backtrace_fix, r=RalfJung
Make backtraces work with #[global_allocator]

Currently, backtraces break when the global allocator is overridden because the allocator will attempt to deallocate memory allocated directly by Miri.

~~This PR fixes that by using a new memory kind and providing a function to deallocate it. We can't call the custom allocator to allocate because it's not possible to call a function in the middle of a shim.~~

This PR fixes that by adding a new version of the backtrace API accessible by setting `flags` to 1. Existing code still functions.

backtrace-rs PR: rust-lang/backtrace-rs#462

Fixes https://github.com/rust-lang/miri/issues/1996
2022-03-20 02:37:09 +00:00
DrMeepster 2c670b10df add new version of backtrace api using flags=1 2022-03-19 18:14:11 -07:00
Ralf Jung b5d3a25b49 detect when unused bits of a SIMD bitmask are non-0 2022-03-17 13:08:01 -04:00
Ben Kimock 730cd27248 Print more in SB error diagnostics
This tries to clarify exactly why an access is not valid by printing
what memory range the access was over, which in combination with
tag-tracking may help a user figure out the source of the problem.
2022-03-16 20:12:04 -04:00
Ralf Jung bae720c75b add ptr_offset_from OOB test, and update test errors 2022-03-10 18:56:19 -05:00
Ralf Jung 41ffce1145 implement simd_scatter 2022-03-09 19:29:05 -05:00
Ralf Jung 576e2bbed5 implement gather 2022-03-09 19:29:05 -05:00
Ralf Jung db06d4998f implement simd_cast, simd_as 2022-03-07 09:40:23 -05:00
bors 3854a76ace Auto merge of #1970 - asquared31415:open_unix_varargs, r=RalfJung
Allow varargs for libc::open when it is allowed by the second argument

This PR allows `libc::open` to be called using two or three arguments as defined in https://man7.org/linux/man-pages/man2/open.2.html

The presence of the third argument depends on the value of the second argument.  If the second argument dictates that the third argument is *required* miri will emit an error if the argument is missing.  If the second argument does *not* require a third argument, then the argument is ignored and passed as 0 internally (it would be ignored by libc anyway)
2022-03-05 22:47:51 +00:00
asquared31415 8e97599af4 allow varargs for libc::open when it is allowed by the second argument 2022-03-05 17:29:48 -05:00
Ralf Jung c0f7251055 add test for simd division overflow UB 2022-03-03 12:32:42 -05:00
Ralf Jung 97ddcf1f6b adjust for div/rem overflow being UB 2022-03-03 12:14:24 -05:00
Ralf Jung 798dc5a78a Make sure we notice when a u16 is loaded at offset 1 into a u8 allocation 2022-03-02 13:06:28 -05:00
Ralf Jung e9b140b4a5 update fn ptr tests 2022-02-25 12:06:10 -05:00
Ralf Jung 444396d620 rustup 2022-02-24 10:55:40 -05:00
Ralf Jung 1ac1e55f3b implement simd_eq and simd_reduce_any 2022-02-21 21:41:52 -05:00
Ralf Jung 5ab0ea67f2 adjust output for calling convention check 2021-12-24 12:02:23 +01:00
Ralf Jung 44cad75069 fix iteration-order-dependent output 2021-12-15 16:51:40 +01:00
5225225 f0d915703c Add tests for double destroying various pthread items 2021-12-06 21:15:02 +00:00
5225225 eadeedde42 Handle uninit data in pthread_condattr_destroy 2021-12-05 19:47:29 +00:00
Ralf Jung 4414d96323 implement shl and shr SIMD intrinsics 2021-11-25 17:26:37 -05:00
Ralf Jung a534bbbf8a portable SIMD: add rem intrinsic; test div and rem intrinsic UB 2021-11-25 17:13:33 -05:00
Ralf Jung d8bee92aee rename track-raw-pointers flag to tag-raw-pointers 2021-11-13 15:48:27 -05:00
Noah Lev 1cca2acf95 Add test for uninit raw ptrs 2021-11-10 11:36:42 -08:00
Noah Lev b3be6b44b6 Add tests for -Zmiri-check-number-validity 2021-11-10 11:36:42 -08:00
Noah Lev 6d1d8c69a0 rustup 2021-11-01 16:12:38 -07:00
Noah Lev 9af75a824f rustup
Update to the `HEAD` commit of rust-lang/rust and fix test failure.
2021-10-05 13:13:06 -07:00
DrMeepster e6a27a68fa implement #[global_allocator] 2021-09-28 20:32:53 -07:00