From patchwork Fri Feb 13 10:27:26 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Doherty, Declan" X-Patchwork-Id: 3298 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id B18D8B472; Fri, 13 Feb 2015 11:24:37 +0100 (CET) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id B1FDCB434 for ; Fri, 13 Feb 2015 11:24:36 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga102.jf.intel.com with ESMTP; 13 Feb 2015 02:20:43 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,570,1418112000"; d="scan'208";a="677445100" Received: from dwdohert-dpdk-fedora-20.ir.intel.com ([163.33.213.98]) by fmsmga002.fm.intel.com with ESMTP; 13 Feb 2015 02:24:33 -0800 From: Declan Doherty To: dev@dpdk.org Date: Fri, 13 Feb 2015 10:27:26 +0000 Message-Id: <1423823246-32211-1-git-send-email-declan.doherty@intel.com> X-Mailer: git-send-email 1.9.3 Subject: [dpdk-dev] [PATCH] bond: fix for kvlist memory leak on rte_kvargs_process failure identified by klockwork scan 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Declan Doherty Acked-by: Olivier Matz Acked-by: Pablo de Lara --- lib/librte_pmd_bond/rte_eth_bond_pmd.c | 49 ++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/lib/librte_pmd_bond/rte_eth_bond_pmd.c b/lib/librte_pmd_bond/rte_eth_bond_pmd.c index 09b0f30..a75b163 100644 --- a/lib/librte_pmd_bond/rte_eth_bond_pmd.c +++ b/lib/librte_pmd_bond/rte_eth_bond_pmd.c @@ -1622,32 +1622,32 @@ bond_init(const char *name, const char *params) /* Parse link bonding mode */ if (rte_kvargs_count(kvlist, PMD_BOND_MODE_KVARG) == 1) { if (rte_kvargs_process(kvlist, PMD_BOND_MODE_KVARG, - &bond_ethdev_parse_slave_mode_kvarg, &bonding_mode) != 0) { - RTE_LOG(ERR, EAL, "Invalid mode for bonded device %s\n", name); - return -1; + &bond_ethdev_parse_slave_mode_kvarg, + &bonding_mode) != 0) { + RTE_LOG(ERR, EAL, "Invalid mode for bonded device %s\n", + name); + goto parse_error; } } else { - RTE_LOG(ERR, EAL, - "Mode must be specified only once for bonded device %s\n", - name); - return -1; + RTE_LOG(ERR, EAL, "Mode must be specified only once for bonded " + "device %s\n", name); + goto parse_error; } /* Parse socket id to create bonding device on */ arg_count = rte_kvargs_count(kvlist, PMD_BOND_SOCKET_ID_KVARG); if (arg_count == 1) { if (rte_kvargs_process(kvlist, PMD_BOND_SOCKET_ID_KVARG, - &bond_ethdev_parse_socket_id_kvarg, &socket_id) != 0) { - RTE_LOG(ERR, EAL, - "Invalid socket Id specified for bonded device %s\n", - name); - return -1; + &bond_ethdev_parse_socket_id_kvarg, &socket_id) + != 0) { + RTE_LOG(ERR, EAL, "Invalid socket Id specified for " + "bonded device %s\n", name); + goto parse_error; } } else if (arg_count > 1) { - RTE_LOG(ERR, EAL, - "Socket Id can be specified only once for bonded device %s\n", - name); - return -1; + RTE_LOG(ERR, EAL, "Socket Id can be specified only once for " + "bonded device %s\n", name); + goto parse_error; } else { socket_id = rte_socket_id(); } @@ -1655,18 +1655,21 @@ bond_init(const char *name, const char *params) /* Create link bonding eth device */ port_id = rte_eth_bond_create(name, bonding_mode, socket_id); if (port_id < 0) { - RTE_LOG(ERR, EAL, - "Failed to create socket %s in mode %u on socket %u.\n", - name, bonding_mode, socket_id); - return -1; + RTE_LOG(ERR, EAL, "Failed to create socket %s in mode %u on " + "socket %u.\n", name, bonding_mode, socket_id); + goto parse_error; } internals = rte_eth_devices[port_id].data->dev_private; internals->kvlist = kvlist; - RTE_LOG(INFO, EAL, - "Create bonded device %s on port %d in mode %u on socket %u.\n", - name, port_id, bonding_mode, socket_id); + RTE_LOG(INFO, EAL, "Create bonded device %s on port %d in mode %u on " + "socket %u.\n", name, port_id, bonding_mode, socket_id); return 0; + +parse_error: + rte_kvargs_free(kvlist); + + return -1; } /* this part will resolve the slave portids after all the other pdev and vdev