Is this a out-of-bounds issue?
Lorenzo Bianconi
lorenzo at kernel.org
Thu Sep 12 06:34:26 PDT 2024
> Hi,
>
> The code in drivers/net/wireless/mediatek/mt76/mt7925/mcu.c may have a
> out-of-bounds issue:
>
> 638 for (offset = 0; offset < len; offset += le32_to_cpu(clc->len)) {
> 639 clc = (const struct mt7925_clc *)(clc_base + offset);
> 640
> 641 if (clc->idx > ARRAY_SIZE(phy->clc)) <-
> 642 break;
> 643
> 644 /* do not init buf again if chip reset triggered */
> 645 if (phy->clc[clc->idx])
> 646 continue;
> 647
> 648 phy->clc[clc->idx] = devm_kmemdup(mdev->dev, clc,
> 649 le32_to_cpu(clc->len),
> 650 GFP_KERNEL);
> 651
> 652 if (!phy->clc[clc->idx]) {
> 653 ret = -ENOMEM;
> 654 goto out;
> 655 }
> 656 }
>
> Let's say the array size of "phy->clc" is 2, then the valid index is 0 and 1.
> If "clc->idx" is 2, "clc->idx > ARRAY_SIZE(phy->clc)" must be false, the "break"
> statement won't be executed, and "phy->clc[2]" may access illegal memory address.
>
> So, should we modify the code like this?
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c
> index 748ea6adbc6b..0c2a2337c313 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7925/mcu.c
> @@ -638,7 +638,7 @@ static int mt7925_load_clc(struct mt792x_dev *dev, const char *fw_name)
> for (offset = 0; offset < len; offset += le32_to_cpu(clc->len)) {
> clc = (const struct mt7925_clc *)(clc_base + offset);
>
> - if (clc->idx > ARRAY_SIZE(phy->clc))
> + if (clc->idx >= ARRAY_SIZE(phy->clc))
> break;
>
> /* do not init buf again if chip reset triggered */
>
> --
> Best,
> Qianqiang Li
>
Hi,
I think this is already fixed here:
https://patchwork.kernel.org/project/linux-wireless/patch/84bf5dd2-2fe3-4410-a7af-ae841e41082a@stanley.mountain/
Regards,
Lornzo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mediatek/attachments/20240912/691f501d/attachment.sig>
More information about the Linux-mediatek
mailing list