Closed
Description
Progress
- Decide how this is affected by Update reference safety requirements rust-lang/rust#125021
Details
Credit to @djkoloski for noticing this issue.
Currently, the Ptr
type's internal invariants require that the pointer point to a valid allocation. However, the ptr
module docs imply that zero-sized accesses do not require a pointer to a valid allocation. This is problematic for us, since it implies that Rust could generate a reference to a ZST which does not point to an allocation. Thus, our impl of From<&T> for Ptr<T>
might be unsound (albeit in a way that isn't currently exercisable): it promises that, based on the fact that &T
is a reference, it must refer to a valid allocation. If T
is a ZST, that implication might not hold.
We should do the following:
- Modify the internal invariants to allow for the pointer to not reference a valid allocation so long as the pointer addresses a byte range of length 0
- Figure out how to modify the internal invariants regarding provenance: Provenance for zero-sized accesses? rust-lang/unsafe-code-guidelines#490