From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by dpdk.org (Postfix) with ESMTP id ABF042BF2 for ; Wed, 30 Mar 2016 17:31:06 +0200 (CEST) Received: from glumotte.dev.6wind.com (unknown [10.16.0.195]) by proxy.6wind.com (Postfix) with ESMTP id B21B724ECB; Wed, 30 Mar 2016 17:30:22 +0200 (CEST) From: Olivier Matz To: dev@dpdk.org Cc: bruce.richardson@intel.com Date: Wed, 30 Mar 2016 17:30:23 +0200 Message-Id: <1459351827-3346-1-git-send-email-olivier.matz@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1458044745-32764-1-git-send-email-olivier.matz@6wind.com> References: <1458044745-32764-1-git-send-email-olivier.matz@6wind.com> Subject: [dpdk-dev] [PATCH 0/4] fix lpm and hash creation 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: Wed, 30 Mar 2016 15:31:06 -0000 Seen while trying to fix the func_reentrancy autotest. The series addresses several issues: 1/ Hash and lpm return a pointer to an existing object if the user requests the creation with an already existing name. This look dangerous: when an object is returned, the user does not know if it should be freed or not. 2/ There is a race condition in cuckoo_hash as the lock is not held in rte_hash_create(). We could find some cases where NULL is returned when the object already exists (ex: when rte_ring_create() fails). 3/ There is a race condition func_reentrancy that can fail even if the tested API behaves correctly. Changes since RFC: - split the patch in 4 patches - on error, set rte_errno to EEXIST when relevant - fix locking in cuckoo_hash creation Olivier Matz (4): lpm: allocation of an existing object should fail hash: allocation of an existing object should fail hash: keep the list locked at creation autotest: fix func reentrancy app/test/test_func_reentrancy.c | 31 +++++++++++++++++++++---------- app/test/test_lpm6.c | 2 +- lib/librte_hash/rte_cuckoo_hash.c | 18 +++++++++++++----- lib/librte_hash/rte_fbk_hash.c | 5 ++++- lib/librte_lpm/rte_lpm.c | 10 ++++++++-- lib/librte_lpm/rte_lpm6.c | 5 ++++- 6 files changed, 51 insertions(+), 20 deletions(-) -- 2.1.4