From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751894AbcAAMWW (ORCPT ); Fri, 1 Jan 2016 07:22:22 -0500 Received: from mout.web.de ([212.227.17.12]:56179 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751467AbcAAMWT (ORCPT ); Fri, 1 Jan 2016 07:22:19 -0500 Subject: [PATCH 1/3] net-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> Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall From: SF Markus Elfring Message-ID: <56866F68.6070904@users.sourceforge.net> Date: Fri, 1 Jan 2016 13:22:00 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <56866E7F.8080609@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:PzkCc5HX0Fmt9N4z0jT85R5DXxLzsFZ7srP8e/8jM01zx/H8pim 3FsS6f1biwDjQTAcyQmN/JfYZktGb8G21WzTddZkOD4goE/Zi1j9zBaNTl3bLSeBtxhyVfM pi15wxRyYr6Ah/03SUdzEZQjqga+KO0VQdL6eEtZl94qMCvO0GOBj3c1gmd8O0kTZ2v8c3i jNYFQYGA1hwSPd6uL8Mgg== X-UI-Out-Filterresults: notjunk:1;V01:K0:8IcDYg2JgcY=:DJ+jbjFEdXmT0fUn6qhj0s lCNibPGCNjmUw10fTnWXjUAhYVWazLAjN9/hmvzMyW/JXYZ1K85GHOT9Xgt6H9PRtWeds2HGT YjaXCv5cBJXVep+lclD53SSpPhIOYv5wFr12Zvpu1c03KvnmuOeZ/6NROcmCN6Cd8q/Mcdfd5 a4ojJOYwdcb4Ub8wtK2b3YpsBRT9ZCr85vvKJgdzic1DpMdQUumIOKQlex6XDlhRqvdPqKHgY y9PtD8B+C3YNTO2V8eRCVyniiqOUC4lqcT5HzA6I+VeQnyByEFOSzG4SLYkdd1ioMwpoUW7Ti 7ulFKWXXqT408Hy/kcU0ST5lpG5DKd+yJ6ep1U3zoFLMfLonEeJNWuaSSvc3UkwCwbDusobco T8yT43qW34iFFLSecGMTAlN7Sg3EjBltCnsOHVifJWOvxLz4wauUlWksRIqAUyzeJcUE+neM9 s2SHaBHejAc3zy2FlxwW422I5Ngv0JHaOEcELBkgBNxGifIZr9E+JZpkbjLYz1blm5MQ5SfBv CKflR/UAKJZBXIVVMzaxx1rsZ0HyfpjOJUg83ZFvOEUmc5xKL2I9/EQAIYMvLkW15nOIbfGnl JPLw91GRnRbzMgUjxWRE9+GJ3QSplZNzP9MkhU4FFsoU8aejimaHPOvAcklqfBOEBg3OIaUZk hFKJ5UQP1PvaQso1ZOqIBmlOMdi4AsWESjwg8hVM26k9iw1V1irX+pnZi1J0Pn687kTEPhPM8 kusR47KlyUdaSWF79cmynN7624pdhS9kEtOW/9yMN2Lc6hzBaZ5chuqW4mSLtJ6JjQGVK9Y3V SU9yiOu Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Fri, 1 Jan 2016 11:16:04 +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..be4941e 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 1; 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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: SF Markus Elfring Date: Fri, 01 Jan 2016 12:22:00 +0000 Subject: [PATCH 1/3] net-gianfar: Less function calls in gfar_ethflow_to_filer_table() after error detection Message-Id: <56866F68.6070904@users.sourceforge.net> List-Id: References: <566ABCD9.1060404@users.sourceforge.net> <56866E7F.8080609@users.sourceforge.net> In-Reply-To: <56866E7F.8080609@users.sourceforge.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: netdev@vger.kernel.org, Claudiu Manoil Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall From: Markus Elfring Date: Fri, 1 Jan 2016 11:16:04 +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..be4941e 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 1; 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