Re: [PATCH] iio: potentiometer: ds1803: Remove VLA usage

From: Himanshu Jha
Date: Fri Mar 09 2018 - 06:05:24 EST


On Thu, Mar 08, 2018 at 11:39:15AM -0800, Kees Cook wrote:
> On Thu, Mar 8, 2018 at 10:45 AM, Himanshu Jha
> <himanshujha199640@xxxxxxxxx> wrote:
> > In preparation to enabling -Wvla, remove VLA usage and replace it
> > with fixed a fixed length array and therefore, prevent potential
> > stack overflow attacks.
> >
> > Fixed as a part of the discussion to remove all VLAs from the kernel:
> > https://lkml.org/lkml/2018/3/7/621
> >
> > Cc: keescook@xxxxxxxxxxxx
> > Signed-off-by: Himanshu Jha <himanshujha199640@xxxxxxxxx>
> > ---
> > drivers/iio/potentiometer/ds1803.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/iio/potentiometer/ds1803.c b/drivers/iio/potentiometer/ds1803.c
> > index 9b0ff4a..6bf12c9 100644
> > --- a/drivers/iio/potentiometer/ds1803.c
> > +++ b/drivers/iio/potentiometer/ds1803.c
> > @@ -64,7 +64,7 @@ static int ds1803_read_raw(struct iio_dev *indio_dev,
> > struct ds1803_data *data = iio_priv(indio_dev);
> > int pot = chan->channel;
> > int ret;
> > - u8 result[indio_dev->num_channels];
> > + u8 result[ARRAY_SIZE(ds1803_channels)];
>
> It seems like num_channels is always ARRAY_SIZE(ds1803_channels).
> Could the entire field be dropped?

If you're asking to remove num_channels then certainly it is not
possible
since it is a member of industrial I/O device struct and it is not just
a member of regular struct local to this file.

We certainly know that there are only two channels BTW and it can be
tranformed to simply:

u8 result[2];

But then I might have to add an additional comment explaining the magic
number 2.

--
Thanks
Himanshu Jha