net/txgbe: fix null pointer check
authorHongbo Zheng <zhenghongbo3@huawei.com>
Sun, 25 Apr 2021 12:54:29 +0000 (20:54 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 29 Apr 2021 13:10:35 +0000 (15:10 +0200)
In function cons_parse_ntuple_filter, item->spec and item->mask
should be confirmed not null before use memcmp on it, current
judgement (item->spec || item->mask) just can confirm item->spec
or item->mask is not null, and cause null pointer be used in
memcmp.

This patch fix this problem.

Fixes: b7eeecb17556 ("net/txgbe: parse n-tuple filter")
Cc: stable@dpdk.org
Signed-off-by: Hongbo Zheng <zhenghongbo3@huawei.com>
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
Acked-by: Jiawen Wu <jiawenwu@trustnetic.com>
drivers/net/txgbe/txgbe_flow.c

index 81d35f6..effe00f 100644 (file)
@@ -240,11 +240,10 @@ cons_parse_ntuple_filter(const struct rte_flow_attr *attr,
                        return -rte_errno;
                }
                /* if the first item is MAC, the content should be NULL */
-               if ((item->spec || item->mask) &&
-                       (memcmp(eth_spec, &eth_null,
-                               sizeof(struct rte_flow_item_eth)) ||
-                        memcmp(eth_mask, &eth_null,
-                               sizeof(struct rte_flow_item_eth)))) {
+               if ((item->spec && memcmp(eth_spec, &eth_null,
+                                         sizeof(struct rte_flow_item_eth))) ||
+                   (item->mask && memcmp(eth_mask, &eth_null,
+                                         sizeof(struct rte_flow_item_eth)))) {
                        rte_flow_error_set(error, EINVAL,
                                RTE_FLOW_ERROR_TYPE_ITEM,
                                item, "Not supported by ntuple filter");
@@ -272,11 +271,10 @@ cons_parse_ntuple_filter(const struct rte_flow_attr *attr,
                        return -rte_errno;
                }
                /* the content should be NULL */
-               if ((item->spec || item->mask) &&
-                       (memcmp(vlan_spec, &vlan_null,
-                               sizeof(struct rte_flow_item_vlan)) ||
-                        memcmp(vlan_mask, &vlan_null,
-                               sizeof(struct rte_flow_item_vlan)))) {
+               if ((item->spec && memcmp(vlan_spec, &vlan_null,
+                                         sizeof(struct rte_flow_item_vlan))) ||
+                   (item->mask && memcmp(vlan_mask, &vlan_null,
+                                         sizeof(struct rte_flow_item_vlan)))) {
                        rte_flow_error_set(error, EINVAL,
                                RTE_FLOW_ERROR_TYPE_ITEM,
                                item, "Not supported by ntuple filter");