Re: [PATCH] iio: mma8452: use the correct logic to get mma8452_data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am Dienstag, dem 22.02.2022 um 10:42 +0800 schrieb haibo.chen@xxxxxxx:
> From: Haibo Chen <haibo.chen@xxxxxxx>
> 
> The original logic to get mma8452_data is wrong, the *dev point to
> the device belong to iio_dev. we can't use this dev to find the
> correct i2c_client. The original logic happen to work because it
> finally use dev->driver_data to get iio_dev. Here use the API
> to_i2c_client() is wrong and make reader confuse. To correct the
> logic, it should be like this
> 
>   struct mma8452_data *data = iio_priv(dev_get_drvdata(dev));
> 
> But after commit 8b7651f25962 ("iio: iio_device_alloc(): Remove
> unnecessary self drvdata"), the upper logic also can't work.
> When try to show the avialable scale in userspace, will meet kernel
> dump, kernel handle NULL pointer dereference.
> 
> So use dev_to_iio_dev() to correct the logic.
> 
> Fixes: c3cdd6e48e35 ("iio: mma8452: refactor for seperating chip
> specific data")
> Cc: <Stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx>

Reviewed-by: Martin Kepplinger <martink@xxxxxxxxx>

thank you for this fix!

> ---
>  drivers/iio/accel/mma8452.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/accel/mma8452.c
> b/drivers/iio/accel/mma8452.c
> index 64b82b4503ad..0016bb947c10 100644
> --- a/drivers/iio/accel/mma8452.c
> +++ b/drivers/iio/accel/mma8452.c
> @@ -379,8 +379,8 @@ static ssize_t mma8452_show_scale_avail(struct
> device *dev,
>                                         struct device_attribute
> *attr,
>                                         char *buf)
>  {
> -       struct mma8452_data *data = iio_priv(i2c_get_clientdata(
> -                                            to_i2c_client(dev)));
> +       struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> +       struct mma8452_data *data = iio_priv(indio_dev);
>  
>         return mma8452_show_int_plus_micros(buf, data->chip_info-
> >mma_scales,
>                 ARRAY_SIZE(data->chip_info->mma_scales));





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux