safety/unsafety in Rust is factorable, which is a key part of the reason Rust is useful at all.
If you have a memory safety bug in that interface, then you can taint the rest of the program's memory safety as well, correct?
unsafe { libc::fork() };
let v = vec![1];
This may hang or even crash (malloc in the child) but there's no sense in which the unsafe block is "incorrect." Some unsafe code has unavoidable implications for the entire program.If you have a safe function that uses unsafe internally, then all possible invocations of that function should be safe. If this isn't true, then we call those sorts of APIs unsound and they are strongly discouraged. David Tolnay wrote a great blog post about it: https://docs.rs/dtolnay/0.0.7/dtolnay/macro._03__soundness_b...
safe becomes unsafe really quickly
My bigger point here is that you're misunderstanding the advocated Rust value proposition. The value proposition isn't literally "Rust will forever and always eliminate all memory safety bugs in safe Rust." That's silly and no serious person with any credibility would double down on that claim.
The point of the GP was that any safe code using this safe API could in fact be memory unsafe is there is a bug in the unsafe implementation.