mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
gpu: nova-core: gsp: add checking oversized commands
The limit is 16 pages for a single command sent to the GSP. Return an error if `allocate_command` is called with a too large size. Tested-by: Zhi Wang <zhiw@nvidia.com> Signed-off-by: Eliot Courtney <ecourtney@nvidia.com> Link: https://patch.msgid.link/20260306-cmdq-continuation-v6-4-cc7b629200ee@nvidia.com Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
This commit is contained in:
parent
59f237a0d1
commit
41584c7134
|
|
@ -32,7 +32,8 @@
|
|||
GspMsgElement,
|
||||
MsgFunction,
|
||||
MsgqRxHeader,
|
||||
MsgqTxHeader, //
|
||||
MsgqTxHeader,
|
||||
GSP_MSG_QUEUE_ELEMENT_SIZE_MAX, //
|
||||
},
|
||||
PteArray,
|
||||
GSP_PAGE_SHIFT,
|
||||
|
|
@ -300,9 +301,13 @@ fn driver_write_area_size(&self) -> usize {
|
|||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// - `EMSGSIZE` if the command is larger than [`GSP_MSG_QUEUE_ELEMENT_SIZE_MAX`].
|
||||
/// - `ETIMEDOUT` if space does not become available within the timeout.
|
||||
/// - `EIO` if the command header is not properly aligned.
|
||||
fn allocate_command(&mut self, size: usize, timeout: Delta) -> Result<GspCommand<'_>> {
|
||||
if size_of::<GspMsgElement>() + size > GSP_MSG_QUEUE_ELEMENT_SIZE_MAX {
|
||||
return Err(EMSGSIZE);
|
||||
}
|
||||
read_poll_timeout(
|
||||
|| Ok(self.driver_write_area_size()),
|
||||
|available_bytes| *available_bytes >= size_of::<GspMsgElement>() + size,
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@
|
|||
},
|
||||
};
|
||||
|
||||
/// Maximum size of a single GSP message queue element in bytes.
|
||||
pub(crate) const GSP_MSG_QUEUE_ELEMENT_SIZE_MAX: usize =
|
||||
num::u32_as_usize(bindings::GSP_MSG_QUEUE_ELEMENT_SIZE_MAX);
|
||||
|
||||
/// Empty type to group methods related to heap parameters for running the GSP firmware.
|
||||
enum GspFwHeapParams {}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
|
|||
pub const GSP_FW_WPR_META_REVISION: u32 = 1;
|
||||
pub const GSP_FW_WPR_META_MAGIC: i64 = -2577556379034558285;
|
||||
pub const REGISTRY_TABLE_ENTRY_TYPE_DWORD: u32 = 1;
|
||||
pub const GSP_MSG_QUEUE_ELEMENT_SIZE_MAX: u32 = 65536;
|
||||
pub type __u8 = ffi::c_uchar;
|
||||
pub type __u16 = ffi::c_ushort;
|
||||
pub type __u32 = ffi::c_uint;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user