From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg0-f52.google.com (mail-pg0-f52.google.com [74.125.83.52]) by dpdk.org (Postfix) with ESMTP id 0D0B29955 for ; Mon, 21 Aug 2017 11:37:25 +0200 (CEST) Received: by mail-pg0-f52.google.com with SMTP id m133so14745938pga.5 for ; Mon, 21 Aug 2017 02:37:24 -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=rynPOrY+z6+Pu8B7fT42Fv4h/erNpZX3207A8iXh2F4=; b=fZzPksK1FqpJDbkR89ShgV1Knknugb0Zw4HW64myWZkqm4EZgGjgNsSvBufAJ8e079 98xUmbKqPmFE5cn6IkhBOmPiDfEEGytXK8P6bsb7hjdJYEoIDIR54CKQ1T9sfOKbxwfD A+QH0WsEybIYse4Ko9nKx/mESBAodOB6mrx300ZJqXzDa6bVhK1dGhG0t9PmwLNrBBYm M8M+jtVV+X+ikTSuOHn6xrasJeCC8nM40YsgImruD3x4GK27MHlHWEubCWGueZoGC4EL TCSZ36SrjwhxR6C4iR/ZNVXsiWXK1qSQHJHqdF+HpfNs+3v9/TF1cPm/3PcB5thtGpF3 l9HQ== 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=rynPOrY+z6+Pu8B7fT42Fv4h/erNpZX3207A8iXh2F4=; b=AR+t/pVsdYrqhaky0224gCu5ME+wJFj5a2FIWV+PU91mA97/EABjj8bGtWotZclsvN YOjz/ingcweAeQV0Y4GjVPzRakwmuwkdEqTQgqYgtMVbpSL0l/i44X1L7Ioy90iWPC5a bZzWbBTzBTJs33awqYu8hjIQAmO5m/+xkYm7NVbbWpaKAGJRfWHjYN+OLnmDIZUMEYyQ FWhUGRZQPOPEqkNHXSk6w9aO3zw6nuifx10jU+LmVknYgbTmaFkV/q6ykDX8Akqbw3gk WfAx9OOcs9WLz4Y9/5ZBtIDqx7Vq4xsKLFjzpWRYrp1bzot63448YsDYcM63Tr4fTUmz oajA== X-Gm-Message-State: AHYfb5hx3I00D1NqrEA20GZ2ucypdF1tQujyQDD8p4jqlzHydfTwfLTv CrYwweq0L2SgnjEG5iFisA== X-Received: by 10.98.113.9 with SMTP id m9mr16295132pfc.263.1503308244351; Mon, 21 Aug 2017 02:37:24 -0700 (PDT) Received: from localhost.localdomain ([45.63.61.64]) by smtp.gmail.com with ESMTPSA id 69sm23355087pfh.186.2017.08.21.02.37.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Aug 2017 02:37:23 -0700 (PDT) From: Yuanhan Liu To: Herbert Guan Cc: Declan Doherty , dpdk stable , Yuanhan Liu Date: Mon, 21 Aug 2017 17:31:04 +0800 Message-Id: <1503307878-16728-50-git-send-email-yliu@fridaylinux.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503307878-16728-1-git-send-email-yliu@fridaylinux.org> References: <1503307878-16728-1-git-send-email-yliu@fridaylinux.org> Subject: [dpdk-stable] patch 'test/bonding: fix memory corruptions' has been queued to stable release 17.05.2 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: Mon, 21 Aug 2017 09:37:25 -0000 Hi, FYI, your patch has been queued to stable release 17.05.2 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 08/24/17. So please shout if anyone has objections. Thanks. --yliu --- >>From 06dff7045bc57d15010c4734803b89b600c5fe84 Mon Sep 17 00:00:00 2001 From: Herbert Guan Date: Mon, 10 Jul 2017 19:13:46 +0800 Subject: [PATCH] test/bonding: fix memory corruptions [ upstream commit 8d3708efece06212bde6b1e10b2251931e1e9961 ] There were double-free problems in some test cases, which will cause a duplicated mbuf will be added into mempool. After double-free, some new allocated mbuf will hold a same address and thus cause the memory corruption. Another minor issue is that in some test cases, allocated mbuf will not be released after test case exits. Hopefully these leaked mbuf will be released by the next test case in its setup phase when stopping the virtual pmd ports, while this do is a memory leak of the exited test case. To fix above 2 issues, this patch will do: 1) Release virtual pmd ports' tx queue in the clean up function remove_slaves_and_stop_bonded_device() of each test cases. 2) Do not release allocated mbufs for test bursts. These mbufs will be released in remove_slaves_and_stop_bonded_device() when test case exits. Fixes: 92073ef961ee ("bond: unit tests") Signed-off-by: Herbert Guan Acked-by: Declan Doherty --- test/test/test_link_bonding.c | 64 ++++++------------------------------------- 1 file changed, 9 insertions(+), 55 deletions(-) diff --git a/test/test/test_link_bonding.c b/test/test/test_link_bonding.c index 52d2d05..aeb234f 100644 --- a/test/test/test_link_bonding.c +++ b/test/test/test_link_bonding.c @@ -221,6 +221,10 @@ static struct rte_eth_txconf tx_conf_default = { }; +static void free_virtualpmd_tx_queue(void); + + + static int configure_ethdev(uint8_t port_id, uint8_t start, uint8_t en_isr) { @@ -684,6 +688,7 @@ static int remove_slaves_and_stop_bonded_device(void) { /* Clean up and remove slaves from bonded device */ + free_virtualpmd_tx_queue(); while (test_params->bonded_slave_count > 0) TEST_ASSERT_SUCCESS(test_remove_slave_from_bonded_device(), "test_remove_slave_from_bonded_device failed"); @@ -1617,9 +1622,6 @@ test_roundrobin_rx_burst_on_single_slave(void) /* free mbufs */ for (i = 0; i < MAX_PKT_BURST; i++) { - if (gen_pkt_burst[i] != NULL) - rte_pktmbuf_free(gen_pkt_burst[i]); - if (rx_pkt_burst[i] != NULL) rte_pktmbuf_free(rx_pkt_burst[i]); } @@ -1966,12 +1968,6 @@ test_roundrobin_verify_slave_link_status_change_behaviour(void) for (i = 0; i < MAX_PKT_BURST; i++) { if (rx_pkt_burst[i] != NULL) rte_pktmbuf_free(rx_pkt_burst[i]); - - if (gen_pkt_burst[1][i] != NULL) - rte_pktmbuf_free(gen_pkt_burst[1][i]); - - if (gen_pkt_burst[3][i] != NULL) - rte_pktmbuf_free(gen_pkt_burst[1][i]); } /* Clean up and remove slaves from bonded device */ @@ -2410,7 +2406,7 @@ test_activebackup_verify_slave_link_status_change_failover(void) uint8_t slaves[RTE_MAX_ETHPORTS]; - int i, j, burst_size, slave_count, primary_port; + int i, burst_size, slave_count, primary_port; burst_size = 21; @@ -2543,16 +2539,6 @@ test_activebackup_verify_slave_link_status_change_failover(void) "(%d) port_stats.opackets not as expected", test_params->slave_port_ids[3]); - /* free mbufs */ - for (i = 0; i < TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT; i++) { - for (j = 0; j < MAX_PKT_BURST; j++) { - if (pkt_burst[i][j] != NULL) { - rte_pktmbuf_free(pkt_burst[i][j]); - pkt_burst[i][j] = NULL; - } - } - } - /* Clean up and remove slaves from bonded device */ return remove_slaves_and_stop_bonded_device(); } @@ -3314,7 +3300,7 @@ test_balance_verify_slave_link_status_change_behaviour(void) uint8_t slaves[RTE_MAX_ETHPORTS]; - int i, j, burst_size, slave_count; + int i, burst_size, slave_count; memset(pkt_burst, 0, sizeof(pkt_burst)); @@ -3452,16 +3438,6 @@ test_balance_verify_slave_link_status_change_behaviour(void) test_params->bonded_port_id, (int)port_stats.ipackets, burst_size * 3); - /* free mbufs allocate for rx testing */ - for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) { - for (j = 0; j < MAX_PKT_BURST; j++) { - if (pkt_burst[i][j] != NULL) { - rte_pktmbuf_free(pkt_burst[i][j]); - pkt_burst[i][j] = NULL; - } - } - } - /* Clean up and remove slaves from bonded device */ return remove_slaves_and_stop_bonded_device(); } @@ -3883,7 +3859,7 @@ test_broadcast_verify_slave_link_status_change_behaviour(void) uint8_t slaves[RTE_MAX_ETHPORTS]; - int i, j, burst_size, slave_count; + int i, burst_size, slave_count; memset(pkt_burst, 0, sizeof(pkt_burst)); @@ -3980,16 +3956,6 @@ test_broadcast_verify_slave_link_status_change_behaviour(void) "(%d) port_stats.ipackets not as expected\n", test_params->bonded_port_id); - /* free mbufs allocate for rx testing */ - for (i = 0; i < BROADCAST_LINK_STATUS_NUM_OF_SLAVES; i++) { - for (j = 0; j < MAX_PKT_BURST; j++) { - if (pkt_burst[i][j] != NULL) { - rte_pktmbuf_free(pkt_burst[i][j]); - pkt_burst[i][j] = NULL; - } - } - } - /* Clean up and remove slaves from bonded device */ return remove_slaves_and_stop_bonded_device(); } @@ -4405,7 +4371,7 @@ test_tlb_verify_slave_link_status_change_failover(void) uint8_t slaves[RTE_MAX_ETHPORTS]; - int i, j, burst_size, slave_count, primary_port; + int i, burst_size, slave_count, primary_port; burst_size = 21; @@ -4523,18 +4489,6 @@ test_tlb_verify_slave_link_status_change_failover(void) "(%d) port_stats.ipackets not as expected\n", test_params->bonded_port_id); - /* free mbufs */ - - for (i = 0; i < TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT; i++) { - for (j = 0; j < MAX_PKT_BURST; j++) { - if (pkt_burst[i][j] != NULL) { - rte_pktmbuf_free(pkt_burst[i][j]); - pkt_burst[i][j] = NULL; - } - } - } - - /* Clean up and remove slaves from bonded device */ return remove_slaves_and_stop_bonded_device(); } -- 2.7.4