From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757340AbcAOKLn (ORCPT ); Fri, 15 Jan 2016 05:11:43 -0500 Received: from mout.web.de ([212.227.15.3]:58332 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755175AbcAOKLk (ORCPT ); Fri, 15 Jan 2016 05:11:40 -0500 Subject: [PATCH v3 1/3] gianfar: Less function calls in gfar_ethflow_to_filer_table() after error detection To: netdev@vger.kernel.org, Claudiu Manoil References: <566ABCD9.1060404@users.sourceforge.net> <56866E7F.8080609@users.sourceforge.net> <5698C53C.8060204@users.sourceforge.net> Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall From: SF Markus Elfring Message-ID: <5698C5CB.80305@users.sourceforge.net> Date: Fri, 15 Jan 2016 11:11:23 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <5698C53C.8060204@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:QbCR8iBz8D5Hs0fBXxaxFIGU8u5OWTbBuvRTVojHy4ENGSJDOvE aMH1EArgYKXxTBRy7/RYH/eahaC0j+X+YWsxrS6jlhzzV63YgxwTs0kfapGziEG4ifQVMTr BlKVvqNjSAtRFLX+h3nypE9/Ez8yrRRlXPuVQfc0Ekg/WpIE4RDfhZWvwBlaVcA30SfiQbF 8fVx+vNPPRdKc/evk4VlQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:tyike85/SAk=:T5yS4AZd6VPsnzHAzw0tuA hE7DNsHZH2qenXrUU+dZQByIbwHfe7gan5qzfcsD57sOYf+wJHzvhCiO5PWnppv5EWzeQR8d2 d+HvXvFihfMMScqVRUZJv3rYy4mGW/5KyP25JtzQDcrUAvkOywGV3zrOSW1waY9wq0ifRoglH DJq5pc5QD+J/jmdL9faFW6a6FHlnavxVwzXtkK31OOg+XyZ9kxVCMzeRYNuQmR1BTE1CsirMy TeTfkgp9w1iXxX//ijA5pyw4sP6+wBOVjPtwkrmiQ56EjbjXvSTTuQh35DpFrXb04gW6/+0oz j1L3ZzTlPLLWJMZi5KM/5gZGmIZVlCWpUKaW8W9p7C/FKgICoWs+m7KoYgkHOIU6h0pJpuCcp QEnje+fnqg65lOT6No5c7xvYiWUVsc1S1okK9fX7YQjqNbG1a/9W0IwGNOduRSWm8xzUlevGY uGHqvAyoLc6RO49+pZh7nWTHY5KLFNTfCgXUVhbv9u8DBtHHkoDHcfPHB20KfY3syfPzBudaP 0sWMmQXN8FpysYutEGnluTSFXLX2loTxpwQHbg5PdzxNokTXHro6ZWBG34XFCkeOQCeqfx3Xh vfJMAd5GjlBraSALsUnFWkML+UsViSp2HuitSI3X5H6iTos5y/4sMD3P1ORNS4BdEcMoVE9aX IjPQsM91NSMgJI7rOy4HPdaquVcQ8y9buCFor6lTtB4MyTcQif00yzLZG/7ftHA7XMNy1gyQS dJvdAJKy/ssYQ6uQHaHDw7xh6Ry//z1uguNJQLFGVVemWxmkRH+I18hduqtMdfBVtaHUiuCHj nzH/gAw Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Fri, 15 Jan 2016 10:30:37 +0100 The kfree() function was called in one case by the gfar_ethflow_to_filer_table() function during error handling even if a passed variable contained a null pointer. * Return directly if a memory allocation failed at the beginning. * Adjust jump targets according to the Linux coding style convention. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- drivers/net/ethernet/freescale/gianfar_ethtool.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/freescale/gianfar_ethtool.c b/drivers/net/ethernet/freescale/gianfar_ethtool.c index 4b0ee85..825b051 100644 --- a/drivers/net/ethernet/freescale/gianfar_ethtool.c +++ b/drivers/net/ethernet/freescale/gianfar_ethtool.c @@ -778,11 +778,13 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, local_rqfpr = kmalloc_array(MAX_FILER_IDX + 1, sizeof(unsigned int), GFP_KERNEL); + if (!local_rqfpr) + return 0; local_rqfcr = kmalloc_array(MAX_FILER_IDX + 1, sizeof(unsigned int), GFP_KERNEL); - if (!local_rqfpr || !local_rqfcr) { + if (!local_rqfcr) { ret = 0; - goto err; + goto free_fpr; } switch (class) { @@ -802,7 +804,7 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, netdev_err(priv->ndev, "Right now this class is not supported\n"); ret = 0; - goto err; + goto free_fcr; } for (i = 0; i < MAX_FILER_IDX + 1; i++) { @@ -819,7 +821,7 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, netdev_err(priv->ndev, "No parse rule found, can't create hash rules\n"); ret = 0; - goto err; + goto free_fcr; } /* If a match was found, then it begins the starting of a cluster rule @@ -862,9 +864,9 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, break; priv->cur_filer_idx = priv->cur_filer_idx - 1; } - -err: +free_fcr: kfree(local_rqfcr); +free_fpr: kfree(local_rqfpr); return ret; } -- 2.6.3