Skip to content

Commit f5743f0

Browse files
committed
drm/asahi: render: Clippy fixes
Signed-off-by: Asahi Lina <[email protected]>
1 parent 7e05eea commit f5743f0

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

drivers/gpu/drm/asahi/queue/render.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ impl super::QueueInner::ver {
8888
return Err(EINVAL);
8989
}
9090

91-
// Overflow safety: all these calculations are done in u32.
91+
// This is overflow safe: all these calculations are done in u32.
9292
// At 64Kx64K max dimensions above, this is 2**32 pixels max.
9393
// In terms of tiles that are always larger than one pixel,
9494
// this can never overflow. Note that real actual dimensions
@@ -232,6 +232,7 @@ impl super::QueueInner::ver {
232232

233233
let cmdbuf_read_size =
234234
(cmd.cmd_buffer_size as usize).min(core::mem::size_of::<uapi::drm_asahi_cmd_render>());
235+
// SAFETY: This is the sole UserSlicePtr instance for this cmd_buffer.
235236
let mut cmdbuf_reader = unsafe {
236237
UserSlicePtr::new(
237238
cmd.cmd_buffer as usize as *mut _,
@@ -241,6 +242,8 @@ impl super::QueueInner::ver {
241242
};
242243

243244
let mut cmdbuf: uapi::drm_asahi_cmd_render = Default::default();
245+
// SAFETY: The output pointer is valid, and the size does not exceed the type size
246+
// per the min() above, and all bit patterns are valid.
244247
unsafe {
245248
cmdbuf_reader.read_raw(&mut cmdbuf as *mut _ as *mut u8, cmdbuf_read_size)?;
246249
}
@@ -280,6 +283,9 @@ impl super::QueueInner::ver {
280283
let mut ext_ptr = cmdbuf.extensions;
281284
while ext_ptr != 0 {
282285
let ext_type = u32::from_ne_bytes(
286+
// SAFETY: There is a double read from userspace here, but there is no TOCTOU
287+
// issue since at worst the extension parse below will read garbage, and
288+
// we do not trust any fields anyway.
283289
unsafe { UserSlicePtr::new(ext_ptr as usize as *mut _, 4) }
284290
.read_all()?
285291
.try_into()
@@ -292,13 +298,16 @@ impl super::QueueInner::ver {
292298
cls_pr_debug!(Errors, "Overrides not enabled\n");
293299
return Err(EINVAL);
294300
}
301+
// SAFETY: See above
295302
let mut ext_reader = unsafe {
296303
UserSlicePtr::new(
297304
ext_ptr as usize as *mut _,
298305
core::mem::size_of::<uapi::drm_asahi_cmd_render_unknowns>(),
299306
)
300307
.reader()
301308
};
309+
// SAFETY: The output buffer is valid and of the correct size, and all bit
310+
// patterns are valid.
302311
unsafe {
303312
ext_reader.read_raw(
304313
&mut unks as *mut _ as *mut u8,
@@ -312,13 +321,16 @@ impl super::QueueInner::ver {
312321
let mut ext_user_timestamps: uapi::drm_asahi_cmd_render_user_timestamps =
313322
Default::default();
314323

324+
// SAFETY: See above
315325
let mut ext_reader = unsafe {
316326
UserSlicePtr::new(
317327
ext_ptr as usize as *mut _,
318328
core::mem::size_of::<uapi::drm_asahi_cmd_render_user_timestamps>(),
319329
)
320330
.reader()
321331
};
332+
// SAFETY: The output buffer is valid and of the correct size, and all bit
333+
// patterns are valid.
322334
unsafe {
323335
ext_reader.read_raw(
324336
&mut ext_user_timestamps as *mut _ as *mut u8,

0 commit comments

Comments
 (0)