From 0d56e5c191b197e1d30a0a4c92628836dafced0f Mon Sep 17 00:00:00 2001 From: Wei Yongjun Date: Tue, 18 May 2021 11:24:13 +0000 Subject: [PATCH] net: dsa: qca8k: fix missing unlock on error in qca8k_vlan_(add|del) Add the missing unlock before return from function qca8k_vlan_add() and qca8k_vlan_del() in the error handling case. Fixes: 028f5f8ef44f ("net: dsa: qca8k: handle error with qca8k_read operation") Reported-by: Hulk Robot Signed-off-by: Wei Yongjun Reviewed-by: Vladimir Oltean Signed-off-by: David S. Miller --- drivers/net/dsa/qca8k.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -506,8 +506,10 @@ qca8k_vlan_add(struct qca8k_priv *priv, goto out; reg = qca8k_read(priv, QCA8K_REG_VTU_FUNC0); - if (reg < 0) - return reg; + if (reg < 0) { + ret = reg; + goto out; + } reg |= QCA8K_VTU_FUNC0_VALID | QCA8K_VTU_FUNC0_IVL_EN; reg &= ~(QCA8K_VTU_FUNC0_EG_MODE_MASK << QCA8K_VTU_FUNC0_EG_MODE_S(port)); if (untagged) @@ -519,7 +521,7 @@ qca8k_vlan_add(struct qca8k_priv *priv, ret = qca8k_write(priv, QCA8K_REG_VTU_FUNC0, reg); if (ret) - return ret; + goto out; ret = qca8k_vlan_access(priv, QCA8K_VLAN_LOAD, vid); out: @@ -541,8 +543,10 @@ qca8k_vlan_del(struct qca8k_priv *priv, goto out; reg = qca8k_read(priv, QCA8K_REG_VTU_FUNC0); - if (reg < 0) - return reg; + if (reg < 0) { + ret = reg; + goto out; + } reg &= ~(3 << QCA8K_VTU_FUNC0_EG_MODE_S(port)); reg |= QCA8K_VTU_FUNC0_EG_MODE_NOT << QCA8K_VTU_FUNC0_EG_MODE_S(port); @@ -564,7 +568,7 @@ qca8k_vlan_del(struct qca8k_priv *priv, } else { ret = qca8k_write(priv, QCA8K_REG_VTU_FUNC0, reg); if (ret) - return ret; + goto out; ret = qca8k_vlan_access(priv, QCA8K_VLAN_LOAD, vid); }