From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f67.google.com (mail-lf0-f67.google.com [209.85.215.67]) by dpdk.org (Postfix) with ESMTP id 07D5D1B6C1 for ; Tue, 15 May 2018 19:19:58 +0200 (CEST) Received: by mail-lf0-f67.google.com with SMTP id j193-v6so1381283lfg.6 for ; Tue, 15 May 2018 10:19:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dvpBRiytcHuPn5Vbm6Y28GyAUhVIBoUME5Sb2KzPTFo=; b=fJGAwMUjDFiTJc4TrN/V/8nZcda3pp5S/tq5pE4v3K3KWJEsF3BBNFKf2F8wVZ4OkE ZBLmv55RxZjg+bm6E/xlat33RdNgacIYF42hXk1Wsuxh/D7fX+pONHnVBnCt2Aq4V2yQ NBHB6TWTJNvUeceUulKM3Qpqe1JmrTUHgsCBs15gGndmMMhvncJ2+hrCeTL0LF7YpHFy H5IXbNKjFCeUlzWF400fa5RYbFT5Gl2qDAU8gwl66h6MDaxCC63P/Wk76OL71JnijaUg Q8YQWIRkQN5aWrKIZZWaj90rYy3WjQ4F8iZUoJgT/zXN4YUr6WbZZ5QmjP/JHBq+kGnE pv1g== 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=dvpBRiytcHuPn5Vbm6Y28GyAUhVIBoUME5Sb2KzPTFo=; b=fq1VdM/J82wgm3NqpJKvXoobBlbvSz0HWXdsPJ2tbBeph8WDKMwdTimx19vcBlDHCJ 53Yyu06maTMg7D7drPFEnHgMb/9Iv5E6M3NK+/PblI3LjxzSUEXo8/OcKdCaDGh89PxV Ony7pipHHd5rMnR1e2uAmGEW+DzvWWlqmb2DqdGP+hetmPNZyqbBio602DxclvSlm1Bn GNpG2fLvkaaCw5exQXI9gTo4MH0GA1uQNW3PlbNDg6ZF22l0RfCtNUJ942unjVcCx8Da wKlZUbQIDiaux8hCiEl79GDxCuxacEvSLRqoPwhbuH+3/jDrIEQvDp7YKygF9GvXtLT9 zFVA== X-Gm-Message-State: ALKqPwfnddeH1wZgcd221M5K0tYovUXtcHyVJ0A7lNxsD++FPicOU6pG 8kcqYe535CddfV40w8ye6Gs= X-Google-Smtp-Source: AB8JxZrvgs6OkKHS+YDx+krctLK/QwPBWxNszSwZcXjR82E9rjjO/KkPe/kOVgUlhEC9zSfSzLrTsg== X-Received: by 2002:a19:1054:: with SMTP id f81-v6mr13256105lfi.67.1526404797613; Tue, 15 May 2018 10:19:57 -0700 (PDT) Received: from localhost ([2a00:23c5:be9a:5200:ce4c:82c0:d567:ecbb]) by smtp.gmail.com with ESMTPSA id m6-v6sm125015lfb.61.2018.05.15.10.19.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 15 May 2018 10:19:56 -0700 (PDT) From: luca.boccassi@gmail.com To: Reshma Pattan Cc: David Hunt , dpdk stable Date: Tue, 15 May 2018 18:19:10 +0100 Message-Id: <20180515171933.12882-9-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180515171933.12882-1-luca.boccassi@gmail.com> References: <20180501104509.17238-46-luca.boccassi@gmail.com> <20180515171933.12882-1-luca.boccassi@gmail.com> Subject: [dpdk-stable] patch 'test/reorder: fix freeing mbuf twice' has been queued to LTS release 16.11.7 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: Tue, 15 May 2018 17:19:58 -0000 Hi, FYI, your patch has been queued to LTS release 16.11.7 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 05/16/18. So please shout if anyone has objections. Thanks. Luca Boccassi --- >>From 43875bb9f80df9475f7a423af205156a338a1644 Mon Sep 17 00:00:00 2001 From: Reshma Pattan Date: Fri, 4 May 2018 11:47:06 +0100 Subject: [PATCH] test/reorder: fix freeing mbuf twice [ upstream commit ecd867faa860b41a154b3e24f6ea4536562234ab ] mbufs are being freed twice in error, once in rte_mempool_put_bulk() and then in rte_reorder_free(). Refactor the code so that we use rte_reorder_free() to free mbufs in the reorder buffer, and use rte_pktmbuf_free() to free any unused or drained mbufs. Fixes: d0c9b58d71 ("app/test: new reorder unit test") Signed-off-by: Reshma Pattan Reviewed-by: David Hunt --- app/test/test_reorder.c | 47 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/app/test/test_reorder.c b/app/test/test_reorder.c index 26dab0c2b..add455111 100644 --- a/app/test/test_reorder.c +++ b/app/test/test_reorder.c @@ -177,11 +177,11 @@ test_reorder_insert(void) b = rte_reorder_create("test_insert", rte_socket_id(), size); TEST_ASSERT_NOT_NULL(b, "Failed to create reorder buffer"); - ret = rte_mempool_get_bulk(p, (void *)bufs, num_bufs); - TEST_ASSERT_SUCCESS(ret, "Error getting mbuf from pool"); - - for (i = 0; i < num_bufs; i++) + for (i = 0; i < num_bufs; i++) { + bufs[i] = rte_pktmbuf_alloc(p); + TEST_ASSERT_NOT_NULL(bufs[i], "Packet allocation failed\n"); bufs[i]->seqn = i; + } /* This should fill up order buffer: * reorder_seq = 0 @@ -196,6 +196,7 @@ test_reorder_insert(void) ret = -1; goto exit; } + bufs[i] = NULL; } /* early packet - should move mbufs to ready buf and move sequence window @@ -210,6 +211,7 @@ test_reorder_insert(void) ret = -1; goto exit; } + bufs[4] = NULL; /* early packet from current sequence window - full ready buffer */ bufs[5]->seqn = 2 * size; @@ -220,6 +222,7 @@ test_reorder_insert(void) ret = -1; goto exit; } + bufs[5] = NULL; /* late packet */ bufs[6]->seqn = 3 * size; @@ -230,11 +233,15 @@ test_reorder_insert(void) ret = -1; goto exit; } + bufs[6] = NULL; ret = 0; exit: - rte_mempool_put_bulk(p, (void *)bufs, num_bufs); rte_reorder_free(b); + for (i = 0; i < num_bufs; i++) { + if (bufs[i] != NULL) + rte_pktmbuf_free(bufs[i]); + } return ret; } @@ -250,6 +257,10 @@ test_reorder_drain(void) int ret = 0; unsigned i, cnt; + /* initialize all robufs to NULL */ + for (i = 0; i < num_bufs; i++) + robufs[i] = NULL; + /* This would create a reorder buffer instance consisting of: * reorder_seq = 0 * ready_buf: RB[size] = {NULL, NULL, NULL, NULL} @@ -258,9 +269,6 @@ test_reorder_drain(void) b = rte_reorder_create("test_drain", rte_socket_id(), size); TEST_ASSERT_NOT_NULL(b, "Failed to create reorder buffer"); - ret = rte_mempool_get_bulk(p, (void *)bufs, num_bufs); - TEST_ASSERT_SUCCESS(ret, "Error getting mbuf from pool"); - /* Check no drained packets if reorder is empty */ cnt = rte_reorder_drain(b, robufs, 1); if (cnt != 0) { @@ -270,8 +278,11 @@ test_reorder_drain(void) goto exit; } - for (i = 0; i < num_bufs; i++) + for (i = 0; i < num_bufs; i++) { + bufs[i] = rte_pktmbuf_alloc(p); + TEST_ASSERT_NOT_NULL(bufs[i], "Packet allocation failed\n"); bufs[i]->seqn = i; + } /* Insert packet with seqn 1: * reorder_seq = 0 @@ -279,6 +290,7 @@ test_reorder_drain(void) * OB[] = {1, NULL, NULL, NULL} */ rte_reorder_insert(b, bufs[1]); + bufs[1] = NULL; cnt = rte_reorder_drain(b, robufs, 1); if (cnt != 1) { @@ -287,6 +299,8 @@ test_reorder_drain(void) ret = -1; goto exit; } + if (robufs[0] != NULL) + rte_pktmbuf_free(robufs[i]); /* Insert more packets * RB[] = {NULL, NULL, NULL, NULL} @@ -294,18 +308,22 @@ test_reorder_drain(void) */ rte_reorder_insert(b, bufs[2]); rte_reorder_insert(b, bufs[3]); + bufs[2] = NULL; + bufs[3] = NULL; /* Insert more packets * RB[] = {NULL, NULL, NULL, NULL} * OB[] = {NULL, 2, 3, 4} */ rte_reorder_insert(b, bufs[4]); + bufs[4] = NULL; /* Insert more packets * RB[] = {2, 3, 4, NULL} * OB[] = {NULL, NULL, 7, NULL} */ rte_reorder_insert(b, bufs[7]); + bufs[7] = NULL; /* drained expected packets */ cnt = rte_reorder_drain(b, robufs, 4); @@ -315,6 +333,10 @@ test_reorder_drain(void) ret = -1; goto exit; } + for (i = 0; i < 3; i++) { + if (robufs[i] != NULL) + rte_pktmbuf_free(robufs[i]); + } /* * RB[] = {NULL, NULL, NULL, NULL} @@ -329,8 +351,13 @@ test_reorder_drain(void) } ret = 0; exit: - rte_mempool_put_bulk(p, (void *)bufs, num_bufs); rte_reorder_free(b); + for (i = 0; i < num_bufs; i++) { + if (bufs[i] != NULL) + rte_pktmbuf_free(bufs[i]); + if (robufs[i] != NULL) + rte_pktmbuf_free(robufs[i]); + } return ret; } -- 2.14.2