Re: [PATCH v5 04/10] rust: sync: atomic: Add generic atomics
"Benno Lossin" <[email protected]>
| Newsgroups | dev.linux.lists.lkmm,org.kernel.vger.linux-arch,org.kernel.vger.linux-kernel,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
On Mon Jun 23, 2025 at 9:09 PM CEST, Boqun Feng wrote: > On Mon, Jun 23, 2025 at 07:30:19PM +0100, Gary Guo wrote: >> cannot just transmute between from pointers to usize (which is its >> Repr): >> * Transmuting from pointer to usize discards provenance >> * Transmuting from usize to pointer gives invalid provenance >> >> We want neither behaviour, so we must store `usize` directly and >> always call into repr functions. >> > > If we store `usize`, how can we support the `get_mut()` then? E.g. > > static V: i32 = 32; > > let mut x = Atomic::new(&V as *const i32 as *mut i32); > // ^ assume we expose_provenance() in new(). > > let ptr: &mut *mut i32 = x.get_mut(); // which is `&mut self.0.get()`. > > let ptr_val = *ptr; // Does `ptr_val` have the proper provenance? If `get_mut` transmutes the integer into a pointer, then it will have the wrong provenance (it will just have plain invalid provenance). --- Cheers, Benno