Re: [PATCH 3/6] gpu: nova-core: add NVKV decoder
| Newsgroups | org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [High] NVKV decoder uses host-endian memory pointer casts and byte casting, breaking big-endian compatibility. -- --- Patch [3]: [PATCH 3/6] gpu: nova-core: add NVKV decoder --- commit 462ea319dececf0891b941e125a3a7cd586a70f8 Author: Eliot Courtney <[email protected]> gpu: nova-core: add NVKV decoder This commit adds a decoder for NVKV to process GMCAPI call messages from the GSP. It introduces a Schema visitor trait to process the (key, index, value) sequences from the encoded stream. > diff --git a/drivers/gpu/nova-core/gsp/nvkv/decode.rs b/drivers/gpu/nova-core/gsp/nvkv/decode.rs > new file mode 100644 > index 0000000000000..ee8b6ab5a3a43 > --- /dev/null > +++ b/drivers/gpu/nova-core/gsp/nvkv/decode.rs [ ... ] > + fn take_u8s(&mut self, count: usize) -> Result<&[u8]> { > + let values = self.take_u64s(count.div_ceil(8))?; > + values.as_bytes().get(..count).ok_or(EINVAL) [Severity: High] Does casting a native [u64] to [u8] using as_bytes() expose the native byte order of the host? If the GSP sends data in little-endian format, won't this yield reversed 8-byte chunks on big-endian architectures? > + } > + > + fn take_u32s(&mut self, count: usize) -> Result<&[u32]> { > + let values = self.take_u64s(count.div_ceil(2))?; > + // SAFETY: `values` is 8 byte aligned and only 4 byte alignment is required. All bit > + // patterns are valid for `u32`. > + Ok(unsafe { core::slice::from_raw_parts(values.as_ptr().cast::<u32>(), count) }) [Severity: High] Could this raw pointer cast from u64 to u32 cause issues on big-endian systems? This appears to change the order of the 32-bit words compared to the original little-endian GSP message layout. > + } > + > + fn take_u64s(&mut self, count: usize) -> Result<&[u64]> { -- Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=3