From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matan Azrad Subject: [PATCH v2 2/2] ethdev: fix flow rule copy functions Date: Mon, 24 Jul 2017 16:47:33 +0300 Message-ID: <1500904053-4543-3-git-send-email-matan@mellanox.com> References: <1500880222-13347-1-git-send-email-matan@mellanox.com> <1500904053-4543-1-git-send-email-matan@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain Cc: dev@dpdk.org To: Jingjing Wu , Adrien Mazarguil Return-path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0047.outbound.protection.outlook.com [104.47.0.47]) by dpdk.org (Postfix) with ESMTP id 498D237AF for ; Mon, 24 Jul 2017 15:48:16 +0200 (CEST) In-Reply-To: <1500904053-4543-1-git-send-email-matan@mellanox.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The corrupted code checks only RAW flow item type special case for returning its size but doesn't deal with any other flow item type and returns 0 for all the others. This bug leaves the flow descriptor empty for non RAW types. The fix takes the correct size to any regular types from appropriate array. The same issue, with a similar fix, is in flow action size method which deals only with RSS special type. This bug was already present in the original code taken from testpmd. Fixes: bae73ebad91c ("ethdev: add flow rule copy function") Signed-off-by: Matan Azrad --- lib/librte_ether/rte_flow.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/librte_ether/rte_flow.c b/lib/librte_ether/rte_flow.c index 884e4f6..2001fbb 100644 --- a/lib/librte_ether/rte_flow.c +++ b/lib/librte_ether/rte_flow.c @@ -248,8 +248,10 @@ struct rte_flow * flow_item_spec_size(const struct rte_flow_item *item, size_t *size, size_t *pad) { - if (!item->spec) + if (!item->spec) { + *size = 0; goto empty; + } switch (item->type) { union { const struct rte_flow_item_raw *raw; @@ -262,10 +264,10 @@ struct rte_flow * spec.raw->length * sizeof(*spec.raw->pattern); break; default: -empty: - *size = 0; + *size = rte_flow_desc_item[item->type].size; break; } +empty: *pad = RTE_ALIGN_CEIL(*size, sizeof(double)) - *size; } @@ -274,8 +276,10 @@ struct rte_flow * flow_action_conf_size(const struct rte_flow_action *action, size_t *size, size_t *pad) { - if (!action->conf) + if (!action->conf) { + *size = 0; goto empty; + } switch (action->type) { union { const struct rte_flow_action_rss *rss; @@ -288,10 +292,10 @@ struct rte_flow * conf.rss->num * sizeof(*conf.rss->queue); break; default: -empty: - *size = 0; + *size = rte_flow_desc_action[action->type].size; break; } +empty: *pad = RTE_ALIGN_CEIL(*size, sizeof(double)) - *size; } -- 1.8.3.1