diff --git a/src/platform/redox/epoll.rs b/src/platform/redox/epoll.rs index 7d238fc5ee..37c86da099 100644 --- a/src/platform/redox/epoll.rs +++ b/src/platform/redox/epoll.rs @@ -136,17 +136,23 @@ impl PalEpoll for Sys { } unsafe fn convert_event(event_ptr: *const Event, target_ptr: *mut epoll_event) -> bool { - let event = *event_ptr; + // SAFETY: callers guarantee both pointers are valid, properly aligned, + // and point to initialized storage. The unsafe blocks satisfy edition + // 2024's `unsafe-op-in-unsafe-fn` rule (rustc E0133); the function + // signature stays `unsafe fn` to push the validity proof onto callers. + let event = unsafe { *event_ptr }; if event.id == syscall::EVENT_TIMEOUT_ID { return false; } - *target_ptr = epoll_event { - events: event_flags_to_epoll(event.flags), - data: epoll_data { - u64: event.data as u64, - }, - ..Default::default() - }; + unsafe { + *target_ptr = epoll_event { + events: event_flags_to_epoll(event.flags), + data: epoll_data { + u64: event.data as u64, + }, + ..Default::default() + }; + } true }