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); @@ -355,6 +355,11 @@ int spi_get_bus_and_cs(int busnum, int cs, struct udevice **busp, slave->dev = dev; } + if (!dev) { + ret = -ENODEV; + goto err; + } + slave = dev_get_parent_priv(dev); bus_data = dev_get_uclass_priv(bus); @@ -373,8 +378,11 @@ int spi_get_bus_and_cs(int busnum, int cs, struct udevice **busp, return 0; err: - log_debug("%s: Error path, device '%s'\n", __func__, dev->name); - + if(dev) + log_debug("%s: Error path, device '%s'\n", __func__, dev->name); + else + log_debug("%s: Error path, NULL device\n", __func__); + return ret; } -- 2.30.2