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

vfork can cause memory corruption due to the lack of #[ffi_returns_twice] #1596

Closed
Amanieu opened this issue Nov 17, 2019 · 1 comment
Closed
Labels
C-bug Category: bug I-unsound 💥 A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/Soundness O-linux

Comments

@Amanieu
Copy link
Member

Amanieu commented Nov 17, 2019

Due to the lack of a stable #[ffi_returns_twice] attribute, vfork cannot be safely used since it can cause memory corruption of unrelated local variables in the parent process.

Miscompilation example: https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=e192ab81e8d408fa9984f766e2356697

Fixed (but nightly-only) version with #[ffi_returns_twice]: https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=0de019e56b69aa048f3e0f5319cc187e

@JohnTitor JohnTitor added C-bug Category: bug I-unsound 💥 A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/Soundness O-linux labels Oct 15, 2020
sporksmith added a commit to sporksmith/shadow that referenced this issue Mar 22, 2023
Bare vfork + exec are tricky to use, since it's easy to accidentally
corrupt the parent process's state from the child process. It's also
unsupported in Rust (rust-lang/libc#1596).

I think we could work around this in Rust by using inline assembly or a
C helper function to wrap the fork and exec, but `posix_spawn` basically
does that for us already.
sporksmith added a commit to sporksmith/shadow that referenced this issue Mar 23, 2023
Bare vfork + exec are tricky to use, since it's easy to accidentally
corrupt the parent process's state from the child process. It's also
unsupported in Rust (rust-lang/libc#1596).

I think we could work around this in Rust by using inline assembly or a
C helper function to wrap the fork and exec, but `posix_spawn` basically
does that for us already.
sporksmith added a commit to sporksmith/shadow that referenced this issue Mar 24, 2023
Bare vfork + exec are tricky to use, since it's easy to accidentally
corrupt the parent process's state from the child process. It's also
unsupported in Rust (rust-lang/libc#1596).

I think we could work around this in Rust by using inline assembly or a
C helper function to wrap the fork and exec, but `posix_spawn` basically
does that for us already.
sporksmith added a commit to shadow/shadow that referenced this issue Mar 24, 2023
Bare vfork + exec are tricky to use, since it's easy to accidentally
corrupt the parent process's state from the child process. It's also
unsupported in Rust (rust-lang/libc#1574,
rust-lang/libc#1596).

I think we could work around this in Rust by using inline assembly or a
C helper function to wrap the fork and exec, but `posix_spawn` basically
does that for us already.
@tgross35
Copy link
Contributor

vfork has been deprecated #1574 then removed for 1.0 #3624, so this should be good to close.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: bug I-unsound 💥 A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/Soundness O-linux
Projects
None yet
Development

No branches or pull requests

3 participants