pinctrl: nuvoton: wpcm450: fix out of bounds write
authorMikhail Kobuk <m.kobuk@ispras.ru>
Fri, 25 Aug 2023 10:15:28 +0000 (13:15 +0300)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 12 Sep 2023 07:03:18 +0000 (09:03 +0200)
Write into 'pctrl->gpio_bank' happens before the check for GPIO index
validity, so out of bounds write may happen.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: a1d1e0e3d80a ("pinctrl: nuvoton: Add driver for WPCM450")
Signed-off-by: Mikhail Kobuk <m.kobuk@ispras.ru>
Reviewed-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
Link: https://lore.kernel.org/r/20230825101532.6624-1-m.kobuk@ispras.ru
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/nuvoton/pinctrl-wpcm450.c

index 2d1c1652cfd9d373dc5afde3a1a5cbddb50a4a56..8a9961ac87128d301e76fe6b247b7538be883986 100644 (file)
@@ -1062,13 +1062,13 @@ static int wpcm450_gpio_register(struct platform_device *pdev,
                if (ret < 0)
                        return ret;
 
-               gpio = &pctrl->gpio_bank[reg];
-               gpio->pctrl = pctrl;
-
                if (reg >= WPCM450_NUM_BANKS)
                        return dev_err_probe(dev, -EINVAL,
                                             "GPIO index %d out of range!\n", reg);
 
+               gpio = &pctrl->gpio_bank[reg];
+               gpio->pctrl = pctrl;
+
                bank = &wpcm450_banks[reg];
                gpio->bank = bank;