From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 03549AAD6 for ; Fri, 27 Apr 2018 19:07:14 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Apr 2018 10:07:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,335,1520924400"; d="scan'208";a="41156614" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 27 Apr 2018 10:07:12 -0700 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id w3RH7Bc5026444; Fri, 27 Apr 2018 18:07:11 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id w3RH7BYT023495; Fri, 27 Apr 2018 18:07:11 +0100 Received: (from aburakov@localhost) by sivswdev01.ir.intel.com with LOCAL id w3RH7BBH023491; Fri, 27 Apr 2018 18:07:11 +0100 From: Anatoly Burakov To: dev@dpdk.org Cc: thomas@monjalon.net, bruce.richardson@intel.com, anatoly.burakov@intel.com Date: Fri, 27 Apr 2018 18:07:06 +0100 Message-Id: <9076b73d130bbbeffe9a97af61e314f776aa3148.1524848343.git.anatoly.burakov@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH v4 5/9] mem: fix potential resource leak X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Apr 2018 17:07:15 -0000 Normally, tailq entry should have a valid fd by the time we attempt to map the segment. However, in case it doesn't, we're leaking fd, so fix it. Coverity issue: 272570 Fixes: 2a04139f66b4 ("eal: add single file segments option") Cc: anatoly.burakov@intel.com Signed-off-by: Anatoly Burakov --- Notes: v4: - Unconditionally close fd on remove - Clarify what happens if file is not removed lib/librte_eal/linuxapp/eal/eal_memalloc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c index 5ea6dd3..d366f0a 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c +++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c @@ -522,13 +522,14 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, resize_hugefile(fd, map_offset, alloc_sz, false); if (is_zero_length(fd)) { struct msl_entry *te = get_msl_entry_by_idx(list_idx); - if (te != NULL && te->fd >= 0) { - close(te->fd); + /* te->fd is equivalent to fd */ + if (te != NULL && te->fd >= 0) te->fd = -1; - } /* ignore errors, can't make it any worse */ unlink(path); + close(fd); } + /* if we're not removing the file, fd stays in the tailq */ } else { close(fd); unlink(path); -- 2.7.4