On Fri, May 16, 2025 at 03:50:53PM +0300, ant.v.morya...@gmail.com wrote:
> From: Anton Moryakov <ant.v.morya...@gmail.com>
> 
> The static analyzer (Svace) reported 
> After having been compared to a NULL value at spi-uclass.c:465,
> pointer 'dev' is passed as 1st parameter in call to function 'dev_get_flags' 
> at spi-uclass.c:469, where it is dereferenced at device.h:240.
> 
> Correct explained:
> 1. Added dev && !device_active(dev) check before calling device_active()
> 2. Added explicit if (!dev) check with ret = -ENODEV setting
> 3. Protected logging in error block with if(dev) check
> 
> Signed-off-by: Anton Moryakov <ant.v.morya...@gmail.com>
> ---
>  drivers/spi/spi-uclass.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
> index d6049753740..52b79223f96 100644
> --- a/drivers/spi/spi-uclass.c
> +++ b/drivers/spi/spi-uclass.c
> @@ -345,7 +345,7 @@ int spi_get_bus_and_cs(int busnum, int cs, struct udevice 
> **busp,
>               return ret;
>       }
>  
> -     if (!device_active(dev)) {
> +     if (dev && !device_active(dev)) {
>               struct spi_slave *slave;
>  
>               ret = device_probe(dev);

Given that it looks like from a quick glance most places do not check
for dev before dereferencing perhaps this should be done in
dev_get_flags or so, and a follow-up for the places which had already
been checking.

-- 
Tom

Attachment: signature.asc
Description: PGP signature

Reply via email to