From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f194.google.com (mail-pf0-f194.google.com [209.85.192.194]) by dpdk.org (Postfix) with ESMTP id 270025688 for ; Fri, 14 Jul 2017 12:35:47 +0200 (CEST) Received: by mail-pf0-f194.google.com with SMTP id z6so10579647pfk.3 for ; Fri, 14 Jul 2017 03:35:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=99eLe21TlDyidzYelc60NdOYlVmztchbUHawvPqk6/M=; b=pzE80t+8MZNW0hL8yf8PybrK0sImmvspxA3gV6LufWRrgDPnCyyzjTix6w94xOmuJI 0qgWMjKoCZfi1BZ+tkIiFFWQsnZ8KvvGEb0KLCujTRi1N8MSiZgttP1monOfpomEXUoX Kd30REuQg+B5v/A6x6eZb1JZH8ta6oR74W8Ywsb0XN6xCT+Tbs76ItDR3aivz2bnEXFR 8j723nydigwwN/pQRERWQdlz4b0CTwnw1L9yrNG4qpqzR4nFINoZpxa+LOl+Wjhb5jDS LdmIIaV2zhycVcW/mItNQwhb0NuXOxFh2d6UFfECbEOBA1Oi3fcsd2kgxRKps8aaJRMW lkyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=99eLe21TlDyidzYelc60NdOYlVmztchbUHawvPqk6/M=; b=q3G2ojiQa1judtmUacZnhYTJI5BMdY16HLkvTXlBENGdoZW9fwToy5ObJ+t4cMkauI H25uNc7AXS6uV9iU4eheS3Q4bmFKg7hefqdkaH7eP8WcAAG+5PUQw+r4mu9JS0Xc372c 9qalwWEJnGRcmfLw2Yy+1APbBKwNY2G6V5gFhSlo7fczyujDoDQ93ZjRIGkNhPyuvBr4 eJ1AmCVBDyc/m6R0g5rlJv9G61i1QvZuGpuArt6ZShpfUeRQ5AhnZFG2pcstjGrbx5t9 73TNkS7TwUhbzXPiA35UUzyF5KaD/Ad2mPmC2T4Ei976USaD6wKsdxLfegAKfgxYNHHZ tWZA== X-Gm-Message-State: AIVw1118wmlDyoCtZXnN11g8M4dJ262aAAJpaqcUNN2OL3mZqSwvejvT QxFNK2CQguC9+35CR9UrPCgO X-Received: by 10.84.229.7 with SMTP id b7mr15263625plk.216.1500028546487; Fri, 14 Jul 2017 03:35:46 -0700 (PDT) Received: from localhost.localdomain ([180.158.48.171]) by smtp.gmail.com with ESMTPSA id y205sm15273553pfb.124.2017.07.14.03.35.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 14 Jul 2017 03:35:45 -0700 (PDT) From: Yuanhan Liu To: Jamie Lavigne Cc: Sergio Gonzalez Monroy , dpdk stable Date: Fri, 14 Jul 2017 18:33:43 +0800 Message-Id: <1500028450-25989-19-git-send-email-yliu@fridaylinux.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1500028450-25989-1-git-send-email-yliu@fridaylinux.org> References: <1500028450-25989-1-git-send-email-yliu@fridaylinux.org> Subject: [dpdk-stable] patch 'mem: fix malloc element resize with padding' has been queued to LTS release 16.11.3 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Jul 2017 10:35:47 -0000 Hi, FYI, your patch has been queued to LTS release 16.11.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/19/17. So please shout if anyone has objections. Thanks. --yliu --- >>From 473e0736fdd56daee55ee1596a8e15bc7efb9f4e Mon Sep 17 00:00:00 2001 From: Jamie Lavigne Date: Thu, 8 Jun 2017 19:12:17 +0000 Subject: [PATCH] mem: fix malloc element resize with padding [ upstream commit 6dc931654f6cc90fdf61b278d465cbdf87f795e0 ] Currently when a malloc_elem is split after resizing, any padding present in the elem is ignored. This causes the resized elem to be too small when padding is present, and user data can overwrite the beginning of the following malloc_elem. Solve this by including the size of the padding when computing where to split the malloc_elem. Fixes: af75078fece3 ("first public release") Signed-off-by: Jamie Lavigne Acked-by: Sergio Gonzalez Monroy --- lib/librte_eal/common/malloc_elem.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/librte_eal/common/malloc_elem.c b/lib/librte_eal/common/malloc_elem.c index 42568e1..08516af 100644 --- a/lib/librte_eal/common/malloc_elem.c +++ b/lib/librte_eal/common/malloc_elem.c @@ -314,17 +314,16 @@ malloc_elem_free(struct malloc_elem *elem) int malloc_elem_resize(struct malloc_elem *elem, size_t size) { - const size_t new_size = size + MALLOC_ELEM_OVERHEAD; + const size_t new_size = size + elem->pad + MALLOC_ELEM_OVERHEAD; /* if we request a smaller size, then always return ok */ - const size_t current_size = elem->size - elem->pad; - if (current_size >= new_size) + if (elem->size >= new_size) return 0; struct malloc_elem *next = RTE_PTR_ADD(elem, elem->size); rte_spinlock_lock(&elem->heap->lock); if (next ->state != ELEM_FREE) goto err_return; - if (current_size + next->size < new_size) + if (elem->size + next->size < new_size) goto err_return; /* we now know the element fits, so remove from free list, @@ -333,7 +332,7 @@ malloc_elem_resize(struct malloc_elem *elem, size_t size) elem_free_list_remove(next); join_elem(elem, next); - if (elem->size - new_size >= MIN_DATA_SIZE + MALLOC_ELEM_OVERHEAD){ + if (elem->size - new_size >= MIN_DATA_SIZE + MALLOC_ELEM_OVERHEAD) { /* now we have a big block together. Lets cut it down a bit, by splitting */ struct malloc_elem *split_pt = RTE_PTR_ADD(elem, new_size); split_pt = RTE_PTR_ALIGN_CEIL(split_pt, RTE_CACHE_LINE_SIZE); -- 2.7.4