Message ID | 20220411063324.98542-1-andrei.lalaev@emlid.com |
---|---|
State | Superseded |
Headers | show |
Series | gpiolib: of: fix bounds check for valid mask | expand |
On Tue, Apr 12, 2022 at 11:28 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > On Mon, Apr 11, 2022 at 2:17 PM Andy Shevchenko > <andy.shevchenko@gmail.com> wrote: ... > > OTOH, the current implementation suggests that we have start,end > > rather than start,count. What does documentation tell about it? Does > > it need to be fixed? > Thanks Andy, I rushed this one. Backing it out. With the last analysis by Andrei I think the patch is correct. I suggest waiting for v2 with a better commit message.
diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index ae1ce319cd78..7e5e51d49d09 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -910,7 +910,7 @@ static void of_gpiochip_init_valid_mask(struct gpio_chip *chip) i, &start); of_property_read_u32_index(np, "gpio-reserved-ranges", i + 1, &count); - if (start >= chip->ngpio || start + count >= chip->ngpio) + if (start >= chip->ngpio || start + count > chip->ngpio) continue; bitmap_clear(chip->valid_mask, start, count);
Use "greater" instead of "greater or equal" when performs bounds check to make sure that GPIOS are in available range. Previous implementation skipped ranges which include last GPIO in range. Signed-off-by: Andrei Lalaev <andrei.lalaev@emlid.com> --- drivers/gpio/gpiolib-of.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)