From patchwork Thu Jul 19 09:42:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Burakov, Anatoly" X-Patchwork-Id: 43196 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 42D7134EF; Thu, 19 Jul 2018 11:43:15 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 63089326D; Thu, 19 Jul 2018 11:43:13 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2018 02:43:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,374,1526367600"; d="scan'208";a="55528552" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga007.fm.intel.com with ESMTP; 19 Jul 2018 02:42:47 -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 w6J9gkrX004532; Thu, 19 Jul 2018 10:42:46 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id w6J9gkhX010910; Thu, 19 Jul 2018 10:42:46 +0100 Received: (from aburakov@localhost) by sivswdev01.ir.intel.com with LOCAL id w6J9gkqa010906; Thu, 19 Jul 2018 10:42:46 +0100 From: Anatoly Burakov To: dev@dpdk.org Cc: arybchenko@solarflare.com, stephen@networkplumber.org, thomas@monjalon.net, stable@dpdk.org Date: Thu, 19 Jul 2018 10:42:46 +0100 Message-Id: <038143a314345e9c5bf76b1287497a5c4c9f63ed.1531992860.git.anatoly.burakov@intel.com> X-Mailer: git-send-email 1.7.0.7 Subject: [dpdk-dev] [PATCH] malloc: don't skip pad on free 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Previously, we were skipping erasing pad because we were expecting it to be freed when we were merging adjacent segments. However, if there were no adjacent segments to merge, we would've skipped erasing the pad, leaving non-zero memory in our free space. Fix this by including pad in the erasing unconditionally. Fixes: e43a9f52b7ff ("malloc: fix pad erasing") Cc: stable@dpdk.org Reported-by: Andrew Rybchenko Signed-off-by: Anatoly Burakov Tested-by: Andrew Rybchenko --- Notes: I have confirmed the issue with unit tests - adding a simple zero-check function on alloc will throw errors when running malloc_autotest on latest master, but the errors go away once this patch is applied. Our unit test's zmalloc calls check if memory is not zero, but this condition is rare enough not to be triggered by it, and regular malloc calls aren't checked on zeroed out memory. The bulk of the malloc calls in the unit tests are malloc, not zmalloc, so pretty much all of the time the memory is not checked for being zero on alloc. lib/librte_eal/common/malloc_elem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/common/malloc_elem.c b/lib/librte_eal/common/malloc_elem.c index efcb82677..e0a8ed15b 100644 --- a/lib/librte_eal/common/malloc_elem.c +++ b/lib/librte_eal/common/malloc_elem.c @@ -519,8 +519,8 @@ malloc_elem_free(struct malloc_elem *elem) void *ptr; size_t data_len; - ptr = RTE_PTR_ADD(elem, MALLOC_ELEM_HEADER_LEN + elem->pad); - data_len = elem->size - elem->pad - MALLOC_ELEM_OVERHEAD; + ptr = RTE_PTR_ADD(elem, MALLOC_ELEM_HEADER_LEN); + data_len = elem->size - MALLOC_ELEM_OVERHEAD; elem = malloc_elem_join_adjacent_free(elem);