Messages in this thread | | | From | Andy Shevchenko <> | Date | Mon, 7 Mar 2022 00:23:03 +0200 | Subject | Re: [PATCH] gpiolib: check for overflow when reading the 'ngpios' property |
| |
On Mon, Mar 7, 2022 at 12:19 AM Andy Shevchenko <andy.shevchenko@gmail.com> wrote: > On Mon, Mar 7, 2022 at 12:11 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > > > > The ngpio fields both in struct gpio_device as well as gpio_chip are > > 16-bit unsigned integers. Let's not risk an overflow and check if the > > property value represented as a 32-bit unsigned integer is not greater > > than U16_MAX. > > ... > > > + if (ngpios > U16_MAX) { > > + ret = EINVAL; > > + goto err_free_descs; > > + } > > I don't think it's a fatal error in this case. I would perhaps print a > warning and simply use a masked (which is done implicitly by an > assignment of the different type) value. Note, the above is buggy on > the buggy DTs, where the upper part of the value is not used. After > this patch you effectively make a regression on, yes, broken DTs.
Like
if (ngpios > U16_MAX) chip_warn(gc, "line cnt %u is greater than supported; use %u\n", ngpios, (u16)ngpio);
-- With Best Regards, Andy Shevchenko
| |