From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751894AbcAANEf (ORCPT ); Fri, 1 Jan 2016 08:04:35 -0500 Received: from mout.web.de ([212.227.17.12]:61647 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751661AbcAANEc (ORCPT ); Fri, 1 Jan 2016 08:04:32 -0500 Subject: [PATCH v2 1/3] net-gianfar: Less function calls in gfar_ethflow_to_filer_table() after error detection References: <566ABCD9.1060404@users.sourceforge.net> <56866E7F.8080609@users.sourceforge.net> <56866F68.6070904@users.sourceforge.net> Cc: Julia Lawall , LKML , kernel-janitors@vger.kernel.org To: netdev@vger.kernel.org, Claudiu Manoil From: SF Markus Elfring Message-ID: <5686794C.4080308@users.sourceforge.net> Date: Fri, 1 Jan 2016 14:04:12 +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: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:LijvTdOD5HZKVyLQFQbd5t81qmgOLVykRswMjKala3ZgeQR8LGK vf/Fet2JrxUkfLnlQbKMjWkwbklD2rcuPIJ8oteKMycbkUUXWAVObx8d9s+vvA7wTSDpcFk W+JAw4YzDI/t8bEr3OaLZ3Fk7rWBHSdlV6d+fcWp7vLEUBTwnraL2gW7j/yKwtRi2F9IZER kOjFrZT9/bvBvQP6Hk+tQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:MQH9iHs7mv4=:+WIjrgZSPxaBf3VSbYqAca HsJQDCYwc7bcdmjPaWjnDKteC5aWhJqeHJVzNHXM5HWzrvk/AGn/zLB57b6j3Kpz11uGqYYbV mK1EbFUBEZtALGc8P1+s6pBAeGkMJSK9OdH/9WUIIjjUDQaNB5zSnDpk5JwQYT0QMrLT8NTGO 16nTIbRxFH746FtHb0iEK/4gv+fNYgMVv8ArEkdb1ilM9USEsI2qc9w8aIvkdZYmuvy5aDwzw Wz2PjC83IhkJRqF9nZlA3lblAYvdEVgMguouR2AWX46/h8R6rK2Uq5fOdHMgmHQ77BnQj8B3G NdyP1Leqq73JQuhVP7Ntf0nlexwpvL6G8xBgfiILpC/W8FFhwmjcuq1lGpZyEq9y0cDOKDP2H IKPohiENI1hdVOc4VARqQkUA7nCUwMdv/3MbvE1lFA8N3tusEWb/5KdFL0SNounRqjcXom0db DhSni8N87Qzz7zKbI2XZ27qE9RrMbFrN42B6XO3SIdsutppdiBkwHXmlplh2iZFhwV/8aMw0Z 2a9tKHlOJOzmQ1RTkAZQPhO7h8307RDe+AqYaZRYEksoC/I/QIZ/OUtSx6I7rSzg5sDOcFCB6 ayIhfEC4yqZscOT76AsDXQ31LyeOVIvlBb4Ms/yFeN6rlODhXeqq+ql+YbnDspkRVFfaXNsNn R0erB0sTNaIAeXxTsZ5UrT4DsaxbLYHzI9bCATYl5KgAZTEAl8b/aGcg0SBxZb09eP57raLld FkVaeoyxaIpYF98PlppRGd/PnJh4e0RyzjPCAfnbYhfzXjvyzUPNxKDJYmqZsJhvJP9iHMUQS jqrjnp7 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 13:56:09 +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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: SF Markus Elfring Date: Fri, 01 Jan 2016 13:04:12 +0000 Subject: [PATCH v2 1/3] net-gianfar: Less function calls in gfar_ethflow_to_filer_table() after error detecti Message-Id: <5686794C.4080308@users.sourceforge.net> List-Id: References: <566ABCD9.1060404@users.sourceforge.net> <56866E7F.8080609@users.sourceforge.net> <56866F68.6070904@users.sourceforge.net> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: netdev@vger.kernel.org, Claudiu Manoil Cc: Julia Lawall , LKML , kernel-janitors@vger.kernel.org From: Markus Elfring Date: Fri, 1 Jan 2016 13:56:09 +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