[PATCH] iio: proximity: sx9310: fix NULL pointer dereference in sx9310_check_whoami

Yang Zi posted 1 patch 1 month ago
[PATCH] iio: proximity: sx9310: fix NULL pointer dereference in sx9310_check_whoami
Posted by Yang Zi 1 month ago
device_get_match_data() can return NULL, e.g. when the device is matched
through the I2C device ID table rather than the OF/ACPI match tables. In
that case sx9310_check_whoami() dereferences a NULL pointer when reading
ddata->whoami.

Return -ENODEV if no match data is found to avoid the NULL pointer
dereference.

Signed-off-by: Yang Zi <2959243019@qq.com>
---
diff --git a/drivers/iio/proximity/sx9310.c b/drivers/iio/proximity/sx9310.c
index 79ba46d8a0aa..305b41f2847d 100644
--- a/drivers/iio/proximity/sx9310.c
+++ b/drivers/iio/proximity/sx9310.c
@@ -892,6 +892,8 @@ static int sx9310_check_whoami(struct device *dev,
         return ret;
 
     ddata = device_get_match_data(dev);
+    if (!ddata)
+        return -ENODEV;
     if (ddata->whoami != whoami)
         return -ENODEV;
 


Re: [PATCH] iio: proximity: sx9310: fix NULL pointer dereference in sx9310_check_whoami
Posted by Jonathan Cameron 4 weeks ago
On Tue, 25 Aug 2026 17:18:01 +0800
Yang Zi <2959243019@qq.com> wrote:

> device_get_match_data() can return NULL, e.g. when the device is matched
> through the I2C device ID table rather than the OF/ACPI match tables. In
> that case sx9310_check_whoami() dereferences a NULL pointer when reading
> ddata->whoami.
> 
> Return -ENODEV if no match data is found to avoid the NULL pointer
> dereference.
> 
> Signed-off-by: Yang Zi <2959243019@qq.com>
This one seems to have spaces where it should have tabs as well.

Thanks,

Jonathan

> ---
> diff --git a/drivers/iio/proximity/sx9310.c b/drivers/iio/proximity/sx9310.c
> index 79ba46d8a0aa..305b41f2847d 100644
> --- a/drivers/iio/proximity/sx9310.c
> +++ b/drivers/iio/proximity/sx9310.c
> @@ -892,6 +892,8 @@ static int sx9310_check_whoami(struct device *dev,
>          return ret;
>  
>      ddata = device_get_match_data(dev);
> +    if (!ddata)
> +        return -ENODEV;
>      if (ddata->whoami != whoami)
>          return -ENODEV;
>  
> 
> 
> 
Re: [PATCH] iio: proximity: sx9310: fix NULL pointer dereference in sx9310_check_whoami
Posted by Andy Shevchenko 1 month ago
On Tue, Aug 25, 2026 at 05:18:01PM +0800, Yang Zi wrote:
> device_get_match_data() can return NULL, e.g. when the device is matched
> through the I2C device ID table rather than the OF/ACPI match tables. In
> that case sx9310_check_whoami() dereferences a NULL pointer when reading
> ddata->whoami.
> 
> Return -ENODEV if no match data is found to avoid the NULL pointer
> dereference.

-ENODATA, please.

...

>      ddata = device_get_match_data(dev);
> +    if (!ddata)
> +        return -ENODEV;

+ blank line.

>      if (ddata->whoami != whoami)
>          return -ENODEV;
>  

-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH] iio: proximity: sx9310: fix NULL pointer dereference in sx9310_check_whoami
Posted by Joshua Crofts 1 month ago
On Tue, 25 Aug 2026 17:18:01 +0800
Yang Zi <2959243019@qq.com> wrote:

> device_get_match_data() can return NULL, e.g. when the device is matched
> through the I2C device ID table rather than the OF/ACPI match tables. In
> that case sx9310_check_whoami() dereferences a NULL pointer when reading
> ddata->whoami.
> 
> Return -ENODEV if no match data is found to avoid the NULL pointer
> dereference.
> 
> Signed-off-by: Yang Zi <2959243019@qq.com>
> ---
> diff --git a/drivers/iio/proximity/sx9310.c b/drivers/iio/proximity/sx9310.c
> index 79ba46d8a0aa..305b41f2847d 100644
> --- a/drivers/iio/proximity/sx9310.c
> +++ b/drivers/iio/proximity/sx9310.c
> @@ -892,6 +892,8 @@ static int sx9310_check_whoami(struct device *dev,
>          return ret;
>  
>      ddata = device_get_match_data(dev);
> +    if (!ddata)
> +        return -ENODEV;

-ENODATA is preferred in IIO.

Also looking at the cc list, no need to add addresses that have "commit_signer"
next to them when running get_maintainer.pl, just maintainers, reviewers and
mailing lists.

-- 
Kind regards,
Joshua Crofts