diff mbox series

[v2] irqchip/xilinx: Fix shift out of bounds

Message ID 1723186944-3571957-1-git-send-email-radhey.shyam.pandey@amd.com (mailing list archive)
State New, archived
Headers show
Series [v2] irqchip/xilinx: Fix shift out of bounds | expand

Commit Message

Radhey Shyam Pandey Aug. 9, 2024, 7:02 a.m. UTC
The device tree property 'xlnx,kind-of-intr' sanity checked that
the bitmask contains only set bits which are in the range of the
number of interrupts supported by the controller.

The check is done by shifting the mask right by the number of
supported interrupts and checking the result for zero.

The data type of the mask is u32 and the number of supported
interrupts is up to 32. In case of 32 interrupts the shift is out of
bounds, resulting in a mismatch warning. The out of bounds condition
is also reported by UBSAN.

UBSAN: shift-out-of-bounds in irq-xilinx-intc.c:332:22
shift exponent 32 is too large for 32-bit type 'unsigned int'

Fix it by promoting the mask to u64 for the test.

Fixes: d50466c90724 ("microblaze: intc: Refactor DT sanity check")
Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
---
Changes for v2:
Rephrase one line summary and commit description as suggested by
Thomas Gleixner.
---
 drivers/irqchip/irq-xilinx-intc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


base-commit: ee9a43b7cfe2d8a3520335fea7d8ce71b8cabd9d
diff mbox series

Patch

diff --git a/drivers/irqchip/irq-xilinx-intc.c b/drivers/irqchip/irq-xilinx-intc.c
index 238d3d344949..7e08714d507f 100644
--- a/drivers/irqchip/irq-xilinx-intc.c
+++ b/drivers/irqchip/irq-xilinx-intc.c
@@ -189,7 +189,7 @@  static int __init xilinx_intc_of_init(struct device_node *intc,
 		irqc->intr_mask = 0;
 	}
 
-	if (irqc->intr_mask >> irqc->nr_irq)
+	if ((u64)irqc->intr_mask >> irqc->nr_irq)
 		pr_warn("irq-xilinx: mismatch in kind-of-intr param\n");
 
 	pr_info("irq-xilinx: %pOF: num_irq=%d, edge=0x%x\n",