Commit 01622098 authored by Ofir Bitton's avatar Ofir Bitton Committed by Oded Gabbay

habanalabs/gaudi: fix shift out of bounds

When validating NIC queues, queue offset calculation must be
performed only for NIC queues.
Signed-off-by: default avatarOfir Bitton <obitton@habana.ai>
Reviewed-by: default avatarOded Gabbay <ogabbay@kernel.org>
Signed-off-by: default avatarOded Gabbay <ogabbay@kernel.org>
parent d64a29af
...@@ -5692,15 +5692,17 @@ static int gaudi_parse_cb_no_ext_queue(struct hl_device *hdev, ...@@ -5692,15 +5692,17 @@ static int gaudi_parse_cb_no_ext_queue(struct hl_device *hdev,
{ {
struct asic_fixed_properties *asic_prop = &hdev->asic_prop; struct asic_fixed_properties *asic_prop = &hdev->asic_prop;
struct gaudi_device *gaudi = hdev->asic_specific; struct gaudi_device *gaudi = hdev->asic_specific;
u32 nic_mask_q_id = 1 << (HW_CAP_NIC_SHIFT + u32 nic_queue_offset, nic_mask_q_id;
((parser->hw_queue_id - GAUDI_QUEUE_ID_NIC_0_0) >> 2));
if ((parser->hw_queue_id >= GAUDI_QUEUE_ID_NIC_0_0) && if ((parser->hw_queue_id >= GAUDI_QUEUE_ID_NIC_0_0) &&
(parser->hw_queue_id <= GAUDI_QUEUE_ID_NIC_9_3) && (parser->hw_queue_id <= GAUDI_QUEUE_ID_NIC_9_3)) {
(!(gaudi->hw_cap_initialized & nic_mask_q_id))) { nic_queue_offset = parser->hw_queue_id - GAUDI_QUEUE_ID_NIC_0_0;
dev_err(hdev->dev, "h/w queue %d is disabled\n", nic_mask_q_id = 1 << (HW_CAP_NIC_SHIFT + (nic_queue_offset >> 2));
parser->hw_queue_id);
return -EINVAL; if (!(gaudi->hw_cap_initialized & nic_mask_q_id)) {
dev_err(hdev->dev, "h/w queue %d is disabled\n", parser->hw_queue_id);
return -EINVAL;
}
} }
/* For internal queue jobs just check if CB address is valid */ /* For internal queue jobs just check if CB address is valid */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment