Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Note that UB is program-global #490

Merged
merged 2 commits into from
Mar 11, 2019
Merged

Conversation

Havvy
Copy link
Contributor

@Havvy Havvy commented Dec 28, 2018

Fixes #485

I just wrote this up in a few seconds, so not sure how good the writing is. Figured a note would be good for undefined behavior crossing language barriers.

r? @RalfJung or @ubsan

@Centril
Copy link
Contributor

Centril commented Dec 29, 2018

I think suggesting that UB is bounded at the process level is too nice as it could cause UB in your entire system depending on OS?

Otherwise it looks good, I just don't know if it belongs in the reference or in the nomicon. It seems the latter is more appropriate?

@Havvy
Copy link
Contributor Author

Havvy commented Dec 29, 2018

Anything about unsafety/UB in the reference should be taught in the nomicon. The reference is the place to go for referring to what you've already learned from TRPL or the Nomicon. So, in that sense, it should be placed there.

As for UB affecting the whole OS, I'm not sure how that works unless the process is compiled as part of the OS. Unless you mean the general sense of having a process that could do anything means you have a system that can do anything?

@Centril
Copy link
Contributor

Centril commented Dec 29, 2018

Anything about unsafety/UB in the reference should be taught in the nomicon. The reference is the place to go for referring to what you've already learned from TRPL or the Nomicon. So, in that sense, it should be placed there.

I'm thinking of the reference more as an informal specification of Rust's syntax and static/dynamic semantics; but not as a place where you get more general advanced advice, which the proposed change strikes me as.

As for UB affecting the whole OS, I'm not sure how that works unless the process is compiled as part of the OS. Unless you mean the general sense of having a process that could do anything means you have a system that can do anything?

I'm not sure (totally not an OS expert by any means...). I'm thinking in these terms: Consider a process that runs in ring 0... If UB in one ring-0 process causes it to corrupt memory of other processes, could it not cause UB in those?

@Havvy
Copy link
Contributor Author

Havvy commented Dec 30, 2018

If all processes share the same address space, then memory corruption can be cross-process. But at that point, you could consider all programs part of the same process? But also, by the point somebody runs across this condition, they've hopefully been warned about it in the docs on writing for such an OS. And explaining it here would just muddy everyone else's understanding of it?

It is more general semantics of inter-programming language stuff than explanation of the semantics of the Rust language. Thus I put it in a note. For what's a quick list of UB things to reference, reminding people that UB is not necessarily just in Rust seems like a useful thing to do. Plus the person who opened the issue wondering after looking at the list means that saying nothing leaves it potentially confusing for others as well.

@Centril
Copy link
Contributor

Centril commented Dec 30, 2018

If all processes share the same address space, then memory corruption can be cross-process. But at that point, you could consider all programs part of the same process? But also, by the point somebody runs across this condition, they've hopefully been warned about it in the docs on writing for such an OS. And explaining it here would just muddy everyone else's understanding of it?

Yeah I suppose.

It is more general semantics of inter-programming language stuff than explanation of the semantics of the Rust language. Thus I put it in a note. For what's a quick list of UB things to reference, reminding people that UB is not necessarily just in Rust seems like a useful thing to do. Plus the person who opened the issue wondering after looking at the list means that saying nothing leaves it potentially confusing for others as well.

Alright, let's :shipit: .

@strega-nil
Copy link

@Centril that's along the lines of "no way to reasonably do anything about that". The way language implementations work is that they assume that the hardware and the OS is not faulty. Anything outside of that and there's no way to do anything about it.

@RalfJung
Copy link
Member

I think suggesting that UB is bounded at the process level is too nice as it could cause UB in your entire system depending on OS?

Well if your OS doesn't do process separation, sure -- but would we even still call that an OS nowadays?^^

This PR seems fine to me.

@Centril
Copy link
Contributor

Centril commented Mar 11, 2019

Thanks @Havvy!

@Centril Centril merged commit 3af9d03 into rust-lang:master Mar 11, 2019
@kpp
Copy link

kpp commented Mar 11, 2019

Thanks!

Centril added a commit to Centril/rust that referenced this pull request Mar 29, 2019
Update books

Update reference, book, rust-by-example, edition-guide, embedded-book

## reference

15 commits in 41493ff..27ad493
2019-03-05 12:32:22 +0100 to 2019-03-26 02:06:15 +0100
- Document wasm_import_module for #[link]. (rust-lang/reference#554)
- Fix tidy error. (rust-lang/reference#552)
- Some minor contributing updates. (rust-lang/reference#551)
- Document `type_length_limit`. (rust-lang/reference#546)
- Add some terms to the glossary. (rust-lang/reference#547)
- Document `target_feature` and `cfg_target_feature`. (rust-lang/reference#545)
- Remove undocumented page (rust-lang/reference#539)
- Reorg and update attributes (rust-lang/reference#537)
- Fix some minor link errors. (rust-lang/reference#538)
- Add linkchecker. (rust-lang/reference#521)
- Expand docs on Macros By Example. (rust-lang/reference#511)
- document #[panic_handler] (rust-lang/reference#362)
- document #[used] (rust-lang/reference#361)
- Note that UB is program-global (rust-lang/reference#490)
- Fix copy-paste error in procedural-macros.md (rust-lang/reference#533)

## book

16 commits in 9cffbeabec3bcec42d09432bfe7705125c848889..b93ec30bbc7b1b5c2f44223249ab359bed2ed5a6
2019-03-02 08:22:41 -0500 to 2019-03-26 16:54:10 -0400
- Unignore example that now compiles
- Fix code snippet (rust-lang/book#1863)
- Fix mdbook link text in readme (rust-lang/book#1881)
- Wrap to 80 cols
- Make sentence more complete (rust-lang/book#1885)
- consistenly use increment and decrement (rust-lang/book#1884)
- Fix link to Reference's conditional-compilation. (rust-lang/book#1878)
- Fix subject/verb agreement
- Remove nostarch snapshot files that have been incorporated and checked
- haha teach the dictionary steve's name
- Add authorship info to the front page
- fix accidental <ol>'s (rust-lang/book#1866)
- Edits to Macros (rust-lang/book#1848)
- Mention `lock` returns `MutexGuard` wrapped in a `LockResult`
- Add an example that illustrates NLL (rust-lang/book#1842)
- change the parameter name from `type` to `kind` (rust-lang/book#1845)

## rust-by-example

33 commits in 2ce92beabb912d417a7314d6da83ac9b50dc2afb..f68ef3d0f4959f6a7d92a08d9994b117f0f4d32d
2018-11-20 10:10:23 -0500 to 2019-03-12 15:32:12 -0300
- Fix some broken links. (rust-lang/rust-by-example#1161)
- Update links in README (rust-lang/rust-by-example#1167)
- Add score/lifetimes/trait.md (rust-lang/rust-by-example#1168)
- Fix rust-lang/rust-by-example#1147 - No more `open_mode` method (rust-lang/rust-by-example#1164)
- Fix for loop description in list print example (rust-lang/rust-by-example#1162)
- Add link to Cargo chapter in the index page (rust-lang/rust-by-example#1159)
- Fix grammar in sentence about integer notation (rust-lang/rust-by-example#1157)
- Do not use deprecated functions from `std::error::Error` trait (rust-lang/rust-by-example#1151)
- Update new_types.md to clarify conversion to base type (rust-lang/rust-by-example#1148)
- Fix compatibility with Rust 2018 (rust-lang/rust-by-example#1150)
- Hello: Fix hint link in `fmt` chapter. (rust-lang/rust-by-example#1146)
- Clarify pub(restricted) example a bit (rust-lang/rust-by-example#1133)
- Add "literal" to list of macro designators (rust-lang/rust-by-example#1153)
- Minor fixes for the macros chapter (rust-lang/rust-by-example#1113)
- Use new book links instead of the old second-edition ones (rust-lang/rust-by-example#1143)
- Recommend implementing Display over ToString (rust-lang/rust-by-example#1145)
- Remove unused import and format with `rustfmt` (rust-lang/rust-by-example#1144)
- fix typo (rust-lang/rust-by-example#1142)
- Update syntax for 2018 Edition (rust-lang/rust-by-example#1136)
- Added two missing full stops (rust-lang/rust-by-example#1138)
- Removed unnecessary spaces before macro designators in macros/dry (rust-lang/rust-by-example#1139)
- fix install mdbook command (rust-lang/rust-by-example#1128)
- Changed word `function` to `type` in comment of fn area (rust-lang/rust-by-example#1132)
- Added two missing backticks in generics/multi_bounds (rust-lang/rust-by-example#1129)
- Fixed small logic error in error/option_unwrap/and_then (rust-lang/rust-by-example#1127)
- Fix typo (rust-lang/rust-by-example#1125)
- The code of conduct link was dead. I fixed it. (rust-lang/rust-by-example#1122)
- I added a space in the Display fmt for Complex (rust-lang/rust-by-example#1123)
- Fix Rust install link in the index (rust-lang/rust-by-example#1124)
- Update cargo conventions section (rust-lang/rust-by-example#1121)
- Fixed curly braces in the `To and from Strings` chapter to be parentheses (rust-lang/rust-by-example#1120)
- Edit a typo (rust-lang/rust-by-example#1119)
- Fixes rust-lang/rust-by-example#1115 by correcting the typo from into_iterator to into_iter (rust-lang/rust-by-example#1118)

## edition-guide

1 commits in aa0022c875907886cae8f3ef8e9ebf6e2a5e728d..b56ddb11548450a6df4edd1ed571b2bc304eb9e6
2019-02-27 22:10:39 -0800 to 2019-03-10 10:23:16 +0100
- Links fixes (rust-lang/edition-guide#133)

## embedded-book

6 commits in 9e656ead82bfe869493dec82653a52e27fa6a05c..07fd3880ea0874d82b1d9ed30ad3427ec98b4e8a
2019-03-03 16:03:26 +0000 to 2019-03-27 15:40:52 +0000
- Fix test errors.  (rust-embedded/book#180)
- Update qemu.md  (rust-embedded/book#170)
- Update no-std.md to remove obsolete FAQ link  (rust-embedded/book#177)
- We've come a long way :)  (rust-embedded/book#176)
- Correct link to team  (rust-embedded/book#175)
- Update some book links to their new homes.  (rust-embedded/book#173)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants