From patchwork Sat Nov 1 11:29:34 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudip Mukherjee X-Patchwork-Id: 405785 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B8C1414013F for ; Sat, 1 Nov 2014 22:30:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752950AbaKAL3q (ORCPT ); Sat, 1 Nov 2014 07:29:46 -0400 Received: from mail-pa0-f43.google.com ([209.85.220.43]:59129 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752008AbaKAL3p (ORCPT ); Sat, 1 Nov 2014 07:29:45 -0400 Received: by mail-pa0-f43.google.com with SMTP id eu11so9341632pac.30 for ; Sat, 01 Nov 2014 04:29:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=yx5kEQlBWrVbuHd5fzFFtRBC+nNWMzwnR9DEn/5kStY=; b=EYxn7EMhKXgGTbU+cluuTlv4SB/a7kjHvg1QP3NsTD/8I/O4bo7MRl+DSEfj8bDUat 8HKhPXTgyxY+EiPXPgE0o7Gdth40mbKVvICN9JHWuWchPu34z1ImGaMdY8BycXJy5F2a sIqsYdP9+Hdskhl99ogaaM/5V6cjcd17Mh0XOd7s5ryDOe1LjmOGVFPS3yrey2z7Rns4 9M5Jxi7ujQj1dtZoGcyWc22+56ylc80Ys2rvcyzVJJZXPi8xSycvQOc+YRVPvtM6NCnw nzscx7ArqOg6+boDGgivIIp1NNtz1MIaJNQtvmpk3hVLjh0o8yv5fVt/BJrTmzJsF9KG XcUA== X-Received: by 10.70.100.74 with SMTP id ew10mr31084231pdb.12.1414841384597; Sat, 01 Nov 2014 04:29:44 -0700 (PDT) Received: from localhost.localdomain ([122.169.160.196]) by mx.google.com with ESMTPSA id u1sm243266pdj.29.2014.11.01.04.29.41 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 01 Nov 2014 04:29:43 -0700 (PDT) From: Sudip Mukherjee To: "David S. Miller" Cc: Sudip Mukherjee , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] net: mvpp2: fix possible memory leak Date: Sat, 1 Nov 2014 16:59:34 +0530 Message-Id: <1414841374-30537-1-git-send-email-sudipm.mukherjee@gmail.com> X-Mailer: git-send-email 1.8.1.2 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- hi, i could not build test after modifying it. I tried to compile using multi_v7_defconfig , but the cross compiler i have is not able to compile it and giving sevaral warnings from the assembler. drivers/net/ethernet/marvell/mvpp2.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c index ece83f1..c4382b3 100644 --- a/drivers/net/ethernet/marvell/mvpp2.c +++ b/drivers/net/ethernet/marvell/mvpp2.c @@ -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 */