Commit 0ce0c3cd authored by Alex Dewar's avatar Alex Dewar Committed by David S. Miller

net: dsa: mt7530: Add some return-value checks

In mt7531_cpu_port_config(), if the variable port is neither 5 nor 6,
then variable interface will be used uninitialised. Change the function
to return -EINVAL in this case.

As the return value of mt7531_cpu_port_config() is never checked
(even though it returns an int) add a check in the correct place so that
the error can be passed up the call stack. Now that we correctly handle
errors thrown in this function, also check the return value of
mt7531_mac_config() in case an error occurs here. Also add misisng
checks to mt7530_setup() and mt7531_setup(), which are another level
further up the call stack.

Fixes: c288575f ("net: dsa: mt7530: Add the support of MT7531 switch")
Addresses-Coverity: 1496993 ("Uninitialized variables")
Signed-off-by: default avatarAlex Dewar <alex.dewar90@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7d58e655
...@@ -945,10 +945,14 @@ static int ...@@ -945,10 +945,14 @@ static int
mt753x_cpu_port_enable(struct dsa_switch *ds, int port) mt753x_cpu_port_enable(struct dsa_switch *ds, int port)
{ {
struct mt7530_priv *priv = ds->priv; struct mt7530_priv *priv = ds->priv;
int ret;
/* Setup max capability of CPU port at first */ /* Setup max capability of CPU port at first */
if (priv->info->cpu_port_config) if (priv->info->cpu_port_config) {
priv->info->cpu_port_config(ds, port); ret = priv->info->cpu_port_config(ds, port);
if (ret)
return ret;
}
/* Enable Mediatek header mode on the cpu port */ /* Enable Mediatek header mode on the cpu port */
mt7530_write(priv, MT7530_PVC_P(port), mt7530_write(priv, MT7530_PVC_P(port),
...@@ -1631,9 +1635,11 @@ mt7530_setup(struct dsa_switch *ds) ...@@ -1631,9 +1635,11 @@ mt7530_setup(struct dsa_switch *ds)
mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK,
PCR_MATRIX_CLR); PCR_MATRIX_CLR);
if (dsa_is_cpu_port(ds, i)) if (dsa_is_cpu_port(ds, i)) {
mt753x_cpu_port_enable(ds, i); ret = mt753x_cpu_port_enable(ds, i);
else if (ret)
return ret;
} else
mt7530_port_disable(ds, i); mt7530_port_disable(ds, i);
/* Enable consistent egress tag */ /* Enable consistent egress tag */
...@@ -1785,9 +1791,11 @@ mt7531_setup(struct dsa_switch *ds) ...@@ -1785,9 +1791,11 @@ mt7531_setup(struct dsa_switch *ds)
mt7530_set(priv, MT7531_DBG_CNT(i), MT7531_DIS_CLR); mt7530_set(priv, MT7531_DBG_CNT(i), MT7531_DIS_CLR);
if (dsa_is_cpu_port(ds, i)) if (dsa_is_cpu_port(ds, i)) {
mt753x_cpu_port_enable(ds, i); ret = mt753x_cpu_port_enable(ds, i);
else if (ret)
return ret;
} else
mt7530_port_disable(ds, i); mt7530_port_disable(ds, i);
/* Enable consistent egress tag */ /* Enable consistent egress tag */
...@@ -2276,6 +2284,7 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) ...@@ -2276,6 +2284,7 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port)
struct mt7530_priv *priv = ds->priv; struct mt7530_priv *priv = ds->priv;
phy_interface_t interface; phy_interface_t interface;
int speed; int speed;
int ret;
switch (port) { switch (port) {
case 5: case 5:
...@@ -2293,6 +2302,8 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) ...@@ -2293,6 +2302,8 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port)
priv->p6_interface = interface; priv->p6_interface = interface;
break; break;
default:
return -EINVAL;
} }
if (interface == PHY_INTERFACE_MODE_2500BASEX) if (interface == PHY_INTERFACE_MODE_2500BASEX)
...@@ -2300,7 +2311,9 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) ...@@ -2300,7 +2311,9 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port)
else else
speed = SPEED_1000; speed = SPEED_1000;
mt7531_mac_config(ds, port, MLO_AN_FIXED, interface); ret = mt7531_mac_config(ds, port, MLO_AN_FIXED, interface);
if (ret)
return ret;
mt7530_write(priv, MT7530_PMCR_P(port), mt7530_write(priv, MT7530_PMCR_P(port),
PMCR_CPU_PORT_SETTING(priv->id)); PMCR_CPU_PORT_SETTING(priv->id));
mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL, mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment