phy: Fix possible NULL pointer deference
authorVignesh Raghavendra <vigneshr@ti.com>
Wed, 20 May 2020 17:05:41 +0000 (22:35 +0530)
committerTom Rini <trini@konsulko.com>
Mon, 25 May 2020 15:54:53 +0000 (11:54 -0400)
It is possible that users of generic_phy_*() APIs may pass a valid
struct phy pointer but phy->dev can be NULL, leading to NULL pointer
deference in phy_dev_ops().

So call generic_phy_valid() to verify that phy and phy->dev are both
valid.

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
drivers/phy/phy-uclass.c

index 65b531683480ad99112a9f995a284a219d1b13c2..db7f39cd0b4598ad14aedb9bb6eebdd8c82c9d81 100644 (file)
@@ -118,7 +118,7 @@ int generic_phy_init(struct phy *phy)
 {
        struct phy_ops const *ops;
 
-       if (!phy)
+       if (!generic_phy_valid(phy))
                return 0;
        ops = phy_dev_ops(phy->dev);
 
@@ -129,7 +129,7 @@ int generic_phy_reset(struct phy *phy)
 {
        struct phy_ops const *ops;
 
-       if (!phy)
+       if (!generic_phy_valid(phy))
                return 0;
        ops = phy_dev_ops(phy->dev);
 
@@ -140,7 +140,7 @@ int generic_phy_exit(struct phy *phy)
 {
        struct phy_ops const *ops;
 
-       if (!phy)
+       if (!generic_phy_valid(phy))
                return 0;
        ops = phy_dev_ops(phy->dev);
 
@@ -151,7 +151,7 @@ int generic_phy_power_on(struct phy *phy)
 {
        struct phy_ops const *ops;
 
-       if (!phy)
+       if (!generic_phy_valid(phy))
                return 0;
        ops = phy_dev_ops(phy->dev);
 
@@ -162,7 +162,7 @@ int generic_phy_power_off(struct phy *phy)
 {
        struct phy_ops const *ops;
 
-       if (!phy)
+       if (!generic_phy_valid(phy))
                return 0;
        ops = phy_dev_ops(phy->dev);