Re: [PATCH] iio: adc: at91-sama5d2_adc: fix up casting in at91_adc_read_info_raw()

Ludovic Desroches
2018-07-17T08:12:00Z

On Mon, Jul 09, 2018 at 02:06:59PM +0300, Dan Carpenter wrote:
> This code is problematic because we're supposed to be writing an int but
> we instead write to only the high 16 bits. This doesn't work on big
> endian systems, and there is a potential that the bottom 16 bits are
> used without being initialized.
>
> Fixes: 23ec2774f1cc ("iio: adc: at91-sama5d2_adc: add support for position and pressure channels")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>

This patch sounds good and as it has been tested by Eugen:
Acked-by: Ludovic Desroches <ludovic.desroches@microchip.com>

Thanks Dan and Eugen.

> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> index e02f7d1c86bc..d5ea84cf6460 100644
> --- a/drivers/iio/adc/at91-sama5d2_adc.c
> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> @@ -1296,6 +1296,7 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
> {
> struct at91_adc_state *st = iio_priv(indio_dev);
> u32 cor = 0;
> + u16 tmp_val;
> int ret;
>
> /*
> @@ -1309,7 +1310,8 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
> mutex_lock(&st->lock);
>
> ret = at91_adc_read_position(st, chan->channel,
> - (u16 *)val);
> + &tmp_val);
> + *val = tmp_val;
> mutex_unlock(&st->lock);
> iio_device_release_direct_mode(indio_dev);
>
> @@ -1322,7 +1324,8 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
> mutex_lock(&st->lock);
>
> ret = at91_adc_read_pressure(st, chan->channel,
> - (u16 *)val);
> + &tmp_val);
> + *val = tmp_val;
> mutex_unlock(&st->lock);
> iio_device_release_direct_mode(indio_dev);