drivers/acpi/scan.c: inconsequent NULL handling
The Coverity checker found the following:
<-- snip -->
static intacpi_bus_match (
struct acpi_device *device,
struct acpi_driver *driver)
{
if (driver && driver->ops.match)
return driver->ops.match(device, driver);
return acpi_match_ids(device, driver->ids);
}<-- snip -->
Either driver can be NULL, in which case the driver->ids is a possible NULL pointer reference, or it can't, in which case the check whether it's NULL is superfluous.
cu
Adrian
Signature · 4 lines
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon SeedQuoted 10 lines · Adrian Bunk
static int
acpi_bus_match(
structacpi_device*device,
structacpi_driver*driver){ if (driver && driver->ops.match) return driver->ops.match(device, driver); return acpi_match_ids(device, driver->ids); }
Quoted 3 lines
Either driver can be NULL, in which case the
driver->idsis a possible NULL pointer reference, or it can't, in which case the check whether it's NULL is superfluous.
Follow the mon^Wcall tree.
drivers/acpi/scan.c:478: * acpi_bus_match drivers/acpi/scan.c:484:acpi_bus_match(struct acpi_device *device, struct acpi_driver *driver)drivers/acpi/scan.c:564: if (!acpi_bus_match(dev, drv)) {drivers/acpi/scan.c:682: if (!acpi_bus_match(device, driver)) {
1. acpi_bus_match()
Second arg is passed without changes.
acpi_driver_attach() acpi_bus_register_driver() ===> if (!driver) <=== return_VALUE(-EINVAL); spin_lock(&acpi_device_lock); list_add_tail(&driver->node, &acpi_bus_drivers); spin_unlock(&acpi_device_lock); count = acpi_driver_attach(driver);
2. acpi_bus_match()
acpi_bus_find_driver()
atomic_inc(&driver->references);
^^^^^^^^
spin_unlock(&acpi_device_lock);
if (!acpi_bus_match(device, driver)) {Looks like it can't.