-
Notifications
You must be signed in to change notification settings - Fork 49
Open
Description
Register trait allows reading and writing any pointer in safe code which is unsound.
Example:
use ruduino::Register;
struct Unsound;
impl Register for Unsound {
type T = u8;
const ADDRESS: *mut Self::T = core::ptr::null_mut();
// default implementations of `write`, `read`, `set_musk_raw`, `toggle_raw`,
// `is_mask_set_raw` and `is_clear_raw` dereference `Self::ADDRESS`
// (other methods also depend on them)
}
fn main() {
println!("{}", Unsound::read());
}(for me in debug it produces Process finished with exit code 139 (interrupted by signal 11: SIGSEGV) and in the release mode it prints 0)
Possible solutions:
- make
Registertraitunsafe - do not provide unsound default impls
shepmaster
Metadata
Metadata
Assignees
Labels
No labels