From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 52D258099 for ; Fri, 12 Dec 2014 16:19:27 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 12 Dec 2014 07:19:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.07,564,1413270000"; d="scan'208";a="652902874" Received: from irsmsx107.ger.corp.intel.com ([163.33.3.99]) by orsmga002.jf.intel.com with ESMTP; 12 Dec 2014 07:19:24 -0800 Received: from irsmsx108.ger.corp.intel.com ([169.254.11.150]) by IRSMSX107.ger.corp.intel.com ([169.254.10.190]) with mapi id 14.03.0195.001; Fri, 12 Dec 2014 15:19:23 +0000 From: "Dumitrescu, Cristian" To: "Richardson, Bruce" , "dev@dpdk.org" Thread-Topic: [PATCH] examples: fix unchecked malloc return value in ip_pipeline Thread-Index: AQHQFgaKKyLFJZtuZUOgAhJVoVNBgJyMEbGQ Date: Fri, 12 Dec 2014 15:19:22 +0000 Message-ID: <3EB4FA525960D640B5BDFFD6A3D89126322DDC82@IRSMSX108.ger.corp.intel.com> References: <1418387044-22569-1-git-send-email-bruce.richardson@intel.com> In-Reply-To: <1418387044-22569-1-git-send-email-bruce.richardson@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH] examples: fix unchecked malloc return value in ip_pipeline X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Dec 2014 15:19:27 -0000 Acked by: -----Original Message----- From: Richardson, Bruce = Sent: Friday, December 12, 2014 12:24 PM To: dev@dpdk.org; Dumitrescu, Cristian Cc: Richardson, Bruce Subject: [PATCH] examples: fix unchecked malloc return value in ip_pipeline Static analysis shows that once instance of rte_zmalloc is missing a return value check in the code. This is fixed by adding a return value check. The malloc call itself is moved to earlier in the function so that no work is done unless all memory allocation requests have succeeded - thereby removing the need for rollback on error. Signed-off-by: Bruce Richardson --- examples/ip_pipeline/cmdline.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/examples/ip_pipeline/cmdline.c b/examples/ip_pipeline/cmdline.c index 13d565e..152acb5 100644 --- a/examples/ip_pipeline/cmdline.c +++ b/examples/ip_pipeline/cmdline.c @@ -1093,7 +1093,7 @@ cmd_firewall_add_parsed( __attribute__((unused)) void *data) { struct cmd_firewall_add_result *params =3D parsed_result; - struct app_rule rule, *old_rule; + struct app_rule rule, *old_rule, *new_rule =3D NULL; struct rte_mbuf *msg; struct app_msg_req *req; struct app_msg_resp *resp; @@ -1148,6 +1148,18 @@ cmd_firewall_add_parsed( if (msg =3D=3D NULL) rte_panic("Unable to allocate new message\n"); = + /* if we need a new rule structure, allocate it before we go further */ + if (old_rule =3D=3D NULL) { + new_rule =3D rte_zmalloc_socket("CLI", sizeof(struct app_rule), + RTE_CACHE_LINE_SIZE, rte_socket_id()); + if (new_rule =3D=3D NULL) { + printf("Cannot allocate memory for new rule\n"); + rte_ctrlmbuf_free(msg); + return; + } + } + + /* Fill request message */ req =3D (struct app_msg_req *)rte_ctrlmbuf_data(msg); req->type =3D APP_MSG_REQ_FW_ADD; @@ -1190,12 +1202,6 @@ cmd_firewall_add_parsed( printf("Request FIREWALL_ADD failed (%u)\n", resp->result); else { if (old_rule =3D=3D NULL) { - struct app_rule *new_rule =3D (struct app_rule *) - rte_zmalloc_socket("CLI", - sizeof(struct app_rule), - RTE_CACHE_LINE_SIZE, - rte_socket_id()); - memcpy(new_rule, &rule, sizeof(rule)); TAILQ_INSERT_TAIL(&firewall_table, new_rule, entries); n_firewall_rules++; -- = 1.9.3 -------------------------------------------------------------- Intel Shannon Limited Registered in Ireland Registered Office: Collinstown Industrial Park, Leixlip, County Kildare Registered Number: 308263 Business address: Dromore House, East Park, Shannon, Co. Clare This e-mail and any attachments may contain confidential material for the s= ole use of the intended recipient(s). Any review or distribution by others = is strictly prohibited. If you are not the intended recipient, please conta= ct the sender and delete all copies.