aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Anderson <sean.anderson@seco.com>2022-05-05 13:11:36 -0400
committerTom Rini <trini@konsulko.com>2022-06-08 13:59:53 -0400
commit2a5af4049ccef538095bff67ce9770711db5ed58 (patch)
tree00fbdf2d770ddb4e3cd22bcafe83a50db7cf9fc9
parente844e5d9080604f1dab04f8f285c41335b6373bd (diff)
downloadu-boot-2a5af4049ccef538095bff67ce9770711db5ed58.zip
u-boot-2a5af4049ccef538095bff67ce9770711db5ed58.tar.gz
u-boot-2a5af4049ccef538095bff67ce9770711db5ed58.tar.bz2
net: dsa: Fix segmentation fault if master fails to probe
If the DSA master fails to probe for whatever reason, then DSA devices will continue on as if nothing is wrong. This can cause incorrect behavior. In particular, on sandbox, dsa_sandbox_probe attempts to access the master's private data. This is only safe to do if the master has been probed first. Fix this by probing the master after we look it up, and bailing out if we get an error. Fixes: fc054d563b ("net: Introduce DSA class for Ethernet switches") Signed-off-by: Sean Anderson <sean.anderson@seco.com> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
-rw-r--r--net/dsa-uclass.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/dsa-uclass.c b/net/dsa-uclass.c
index 9ff55a0..3bf4351 100644
--- a/net/dsa-uclass.c
+++ b/net/dsa-uclass.c
@@ -477,8 +477,10 @@ static int dsa_pre_probe(struct udevice *dev)
return -ENODEV;
}
- uclass_find_device_by_ofnode(UCLASS_ETH, pdata->master_node,
- &priv->master_dev);
+ err = uclass_get_device_by_ofnode(UCLASS_ETH, pdata->master_node,
+ &priv->master_dev);
+ if (err)
+ return err;
/* Simulate a probing event for the CPU port */
if (ops->port_probe) {