[PATCH] pinctrl: single: check function mask to be non-zero

Otherwise it can generate a division by zero, which has an undefined behavior.
Signed-off-by: Dario Binacchi dariobin@libero.it ---
drivers/pinctrl/pinctrl-single.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c index 7e1c5bb0a5..ebb7602dde 100644 --- a/drivers/pinctrl/pinctrl-single.c +++ b/drivers/pinctrl/pinctrl-single.c @@ -335,6 +335,10 @@ static int single_configure_bits(struct udevice *dev, phys_addr_t reg; u32 offset, val, mask, bit_pos, val_pos, mask_pos, submask;
+ /* If function mask is null, needn't enable it. */ + if (!pdata->mask) + return 0; + npins_in_reg = pdata->width / priv->bits_per_pin; func = single_allocate_function(dev, count * npins_in_reg); if (IS_ERR(func)) @@ -469,6 +473,11 @@ static int single_probe(struct udevice *dev)
priv->npins = size / (pdata->width / BITS_PER_BYTE); if (pdata->bits_per_mux) { + if (!pdata->mask) { + dev_err(dev, "function mask needs to be non-zero\n"); + return -EINVAL; + } + priv->bits_per_pin = fls(pdata->mask); priv->npins *= (pdata->width / priv->bits_per_pin); }

On Thu, Apr 22, 2021 at 06:35:58PM +0200, Dario Binacchi wrote:
Otherwise it can generate a division by zero, which has an undefined behavior.
Signed-off-by: Dario Binacchi dariobin@libero.it
Applied to u-boot/master, thanks!
participants (2)
-
Dario Binacchi
-
Tom Rini