mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 21:44:06 +08:00
net: mvpp2: fix possible memory leak
we are allocating memory using kzalloc for struct mvpp2_prs_entry, but later when we are getting error we were just returning the error value without releasing the memory. Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ec1f127602
commit
437374735c
@ -1692,6 +1692,7 @@ static int mvpp2_prs_vlan_add(struct mvpp2 *priv, unsigned short tpid, int ai,
|
||||
{
|
||||
struct mvpp2_prs_entry *pe;
|
||||
int tid_aux, tid;
|
||||
int ret = 0;
|
||||
|
||||
pe = mvpp2_prs_vlan_find(priv, tpid, ai);
|
||||
|
||||
@ -1723,8 +1724,10 @@ static int mvpp2_prs_vlan_add(struct mvpp2 *priv, unsigned short tpid, int ai,
|
||||
break;
|
||||
}
|
||||
|
||||
if (tid <= tid_aux)
|
||||
return -EINVAL;
|
||||
if (tid <= tid_aux) {
|
||||
ret = -EINVAL;
|
||||
goto error;
|
||||
}
|
||||
|
||||
memset(pe, 0 , sizeof(struct mvpp2_prs_entry));
|
||||
mvpp2_prs_tcam_lu_set(pe, MVPP2_PRS_LU_VLAN);
|
||||
@ -1756,9 +1759,10 @@ static int mvpp2_prs_vlan_add(struct mvpp2 *priv, unsigned short tpid, int ai,
|
||||
|
||||
mvpp2_prs_hw_write(priv, pe);
|
||||
|
||||
error:
|
||||
kfree(pe);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Get first free double vlan ai number */
|
||||
@ -1821,7 +1825,7 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
|
||||
unsigned int port_map)
|
||||
{
|
||||
struct mvpp2_prs_entry *pe;
|
||||
int tid_aux, tid, ai;
|
||||
int tid_aux, tid, ai, ret = 0;
|
||||
|
||||
pe = mvpp2_prs_double_vlan_find(priv, tpid1, tpid2);
|
||||
|
||||
@ -1838,8 +1842,10 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
|
||||
|
||||
/* Set ai value for new double vlan entry */
|
||||
ai = mvpp2_prs_double_vlan_ai_free_get(priv);
|
||||
if (ai < 0)
|
||||
return ai;
|
||||
if (ai < 0) {
|
||||
ret = ai;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Get first single/triple vlan tid */
|
||||
for (tid_aux = MVPP2_PE_FIRST_FREE_TID;
|
||||
@ -1859,8 +1865,10 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
|
||||
break;
|
||||
}
|
||||
|
||||
if (tid >= tid_aux)
|
||||
return -ERANGE;
|
||||
if (tid >= tid_aux) {
|
||||
ret = -ERANGE;
|
||||
goto error;
|
||||
}
|
||||
|
||||
memset(pe, 0, sizeof(struct mvpp2_prs_entry));
|
||||
mvpp2_prs_tcam_lu_set(pe, MVPP2_PRS_LU_VLAN);
|
||||
@ -1887,8 +1895,9 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
|
||||
mvpp2_prs_tcam_port_map_set(pe, port_map);
|
||||
mvpp2_prs_hw_write(priv, pe);
|
||||
|
||||
error:
|
||||
kfree(pe);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* IPv4 header parsing for fragmentation and L4 offset */
|
||||
|
Loading…
Reference in New Issue
Block a user