gfx-rs/gfx

misaligned pointer in `queue::Queue::get`

shinmao opened this issue · 3 comments

The source of unsoundness

fn get<T>(data: &[u8], ptr: com::BufferSlice) -> &[T] {
let u32_size = mem::size_of::<T>();
assert_eq!(ptr.size % u32_size as u32, 0);
let raw = Self::get_raw(data, ptr);
unsafe { slice::from_raw_parts(raw.as_ptr() as *const _, raw.len() / u32_size) }

We consider that queue::Queue::get is unsound because the program tried to cast u8 slice to f32/f64/i32 and created a unaligned pointer. The unaligned pointer was passed to slice::from_raw_parts which requires the guarantee of pointer's alignment.

Thanks for the issue - gfx is in maintainence mode. If you can submit a PR we'll merge it, but otherwise I wouldn't expect this to be fixed.

@cwfitzgerald considering that this is in maintenance mode, is there another library that is actively maintained that is a GPU interface?

If you want vulkan bindings, use https://crates.io/crates/ash, if you want a safe interface to the gpu, use https://crates.io/crates/wgpu