diff options
author | Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> | 2014-04-19 08:51:43 +0530 |
---|---|---|
committer | Marek Szyprowski <m.szyprowski@samsung.com> | 2014-05-15 07:29:22 +0200 |
commit | 7298da39ff7970fd057a6f9dafe143a330018686 (patch) | |
tree | b1ccfa6616fb479493d9900b99773fb9c6a6de2e | |
parent | b084cf75d1721bd4230ce56a87688a5ef3eda569 (diff) | |
download | linux-3.10-7298da39ff7970fd057a6f9dafe143a330018686.tar.gz linux-3.10-7298da39ff7970fd057a6f9dafe143a330018686.tar.bz2 linux-3.10-7298da39ff7970fd057a6f9dafe143a330018686.zip |
phy: fix kernel oops in phy_lookup()
The kernel oopses in phy_lookup() due to 'phy->init_data' being NULL if we
register PHYs from a device tree probing driver and then call phy_get() on a
device that has no representation in the device tree (e.g. a PCI device).
Checking the pointer before dereferening it and skipping an interation if
it's NULL prevents this kernel oops.
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[backport from upstream commit 743bb387a1edbf1ebbba6cf77c1af3e488886c39]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: Iea16343af63965d19960fc8acf89e0a65b806440
-rw-r--r-- | drivers/phy/phy-core.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c index 623b71c54b3..c64a2f3b2d6 100644 --- a/drivers/phy/phy-core.c +++ b/drivers/phy/phy-core.c @@ -64,6 +64,9 @@ static struct phy *phy_lookup(struct device *device, const char *port) class_dev_iter_init(&iter, phy_class, NULL, NULL); while ((dev = class_dev_iter_next(&iter))) { phy = to_phy(dev); + + if (!phy->init_data) + continue; count = phy->init_data->num_consumers; consumers = phy->init_data->consumers; while (count--) { |