Messages in this thread | | | Date | Wed, 22 Dec 2021 13:38:47 -0500 | From | Liam Beguin <> | Subject | Re: [PATCH v11 09/15] iio: afe: rescale: reduce risk of integer overflow |
| |
On Wed, Dec 22, 2021 at 02:29:04PM +0200, Andy Shevchenko wrote: > On Wed, Dec 22, 2021 at 5:47 AM Liam Beguin <liambeguin@gmail.com> wrote: > > > > From: Liam Beguin <lvb@xiphos.com> > > > > Reduce the risk of integer overflow by doing the scale calculation on > > a 64-bit integer. Since the rescaling is only performed on *val, reuse > > the IIO_VAL_FRACTIONAL_LOG2 case. > > ... > > > - tmp = 1 << *val2; > > At some point this should be BIT()
I'm not against changing this, but (to me at least) 1 << *val2 seems more explicit as we're not working with bitfields. No?
> Rule of thumb (in accordance with C standard), always use unsigned > value as left operand of the _left_ shift.
Right, that makes sense! In practice though, since we'll most likely never use higher bits of *val2 with IIO_VAL_FRACTIONAL_LOG2, would it be enough to simply typecast?
tmp = 1 << (unsigned int)*val2;
Cheers, Liam
> > + if (scale_type == IIO_VAL_FRACTIONAL) > > + tmp = *val2; > > + else > > + tmp = 1 << *val2; > > > -- > With Best Regards, > Andy Shevchenko
| |