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

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
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -5692,16 +5692,18 @@ static int gaudi_parse_cb_no_ext_queue(struct hl_device *hdev,
{
	struct asic_fixed_properties *asic_prop = &hdev->asic_prop;
	struct gaudi_device *gaudi = hdev->asic_specific;
	u32 nic_mask_q_id = 1 << (HW_CAP_NIC_SHIFT +
		((parser->hw_queue_id - GAUDI_QUEUE_ID_NIC_0_0) >> 2));
	u32 nic_queue_offset, nic_mask_q_id;

	if ((parser->hw_queue_id >= GAUDI_QUEUE_ID_NIC_0_0) &&
			(parser->hw_queue_id <= GAUDI_QUEUE_ID_NIC_9_3) &&
			(!(gaudi->hw_cap_initialized & nic_mask_q_id))) {
		dev_err(hdev->dev, "h/w queue %d is disabled\n",
				parser->hw_queue_id);
			(parser->hw_queue_id <= GAUDI_QUEUE_ID_NIC_9_3)) {
		nic_queue_offset = parser->hw_queue_id - GAUDI_QUEUE_ID_NIC_0_0;
		nic_mask_q_id = 1 << (HW_CAP_NIC_SHIFT + (nic_queue_offset >> 2));

		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 */
	if (hl_mem_area_inside_range((u64) (uintptr_t) parser->user_cb,