Skip to content

Commit 1b1bb7b

Browse files
computersforpeacegregkh
authored andcommitted
drivers: base: Don't match devices with NULL of_node/fwnode/etc
of_find_device_by_node(), bus_find_device_by_of_node(), bus_find_device_by_fwnode(), ..., all produce arbitrary results when provided with a NULL of_node, fwnode, ACPI handle, etc. This is counterintuitive, and the source of a few bugs, such as the one fixed by commit 5c8418c ("PCI/pwrctrl: Unregister platform device only if one actually exists"). It's hard to imagine a good reason that these device_match_*() APIs should return 'true' for a NULL argument. Augment these to return 0 (false). Reviewed-by: Rob Herring (Arm) <robh@kernel.org> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Brian Norris <briannorris@chromium.org> Acked-by: David Gow <davidgow@google.com> Acked-by: Shuah Khan <skhan@linuxfoundation.org> Link: https://lore.kernel.org/r/20241216201148.535115-2-briannorris@chromium.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 5ab5a37 commit 1b1bb7b

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

drivers/base/core.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5246,13 +5246,13 @@ EXPORT_SYMBOL_GPL(device_match_name);
52465246

52475247
int device_match_of_node(struct device *dev, const void *np)
52485248
{
5249-
return dev->of_node == np;
5249+
return np && dev->of_node == np;
52505250
}
52515251
EXPORT_SYMBOL_GPL(device_match_of_node);
52525252

52535253
int device_match_fwnode(struct device *dev, const void *fwnode)
52545254
{
5255-
return dev_fwnode(dev) == fwnode;
5255+
return fwnode && dev_fwnode(dev) == fwnode;
52565256
}
52575257
EXPORT_SYMBOL_GPL(device_match_fwnode);
52585258

@@ -5264,13 +5264,13 @@ EXPORT_SYMBOL_GPL(device_match_devt);
52645264

52655265
int device_match_acpi_dev(struct device *dev, const void *adev)
52665266
{
5267-
return ACPI_COMPANION(dev) == adev;
5267+
return adev && ACPI_COMPANION(dev) == adev;
52685268
}
52695269
EXPORT_SYMBOL(device_match_acpi_dev);
52705270

52715271
int device_match_acpi_handle(struct device *dev, const void *handle)
52725272
{
5273-
return ACPI_HANDLE(dev) == handle;
5273+
return handle && ACPI_HANDLE(dev) == handle;
52745274
}
52755275
EXPORT_SYMBOL(device_match_acpi_handle);
52765276

0 commit comments

Comments
 (0)