pinctrl: sunxi: Add some defensiveness for regulators array
authorMark Brown <broonie@kernel.org>
Wed, 12 Jul 2023 17:19:59 +0000 (18:19 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 20 Jul 2023 19:32:36 +0000 (21:32 +0200)
The sunxi pinctrl has a fixed size array it uses to store regulators used
in the driver. There is currently nothing that ensures that the number of
elements in the array is large enough to map the regulators defined by the
individual SoCs. While this is currently the case having an explicit check
in there will make life easier for anyone debugging memory issues that
manifest in the driver so let's add one.

Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Link: https://lore.kernel.org/r/20230712-pinctrl-sunxi-boudns-v1-1-85f37de79b9f@kernel.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sunxi/pinctrl-sunxi.c

index 1dc1882cbdd78f21039e58790807a0cefabaebdd..1d1cd3d6d379ad9aa102b8770c72de6fe67803a2 100644 (file)
@@ -848,6 +848,9 @@ static int sunxi_pmx_request(struct pinctrl_dev *pctldev, unsigned offset)
        char supply[16];
        int ret;
 
+       if (WARN_ON_ONCE(bank_offset >= ARRAY_SIZE(pctl->regulators)))
+               return -EINVAL;
+
        if (reg) {
                refcount_inc(&s_reg->refcount);
                return 0;