Skip to content

Commit

Permalink
net/mlx5: refuse empty VLAN in flow pattern
Browse files Browse the repository at this point in the history
[ upstream commit b6aaaa2 ]

In verbs, an empty VLAN is equivalent to a packet without VLAN layer,
hence, the VLAN item should not be empty and this case is rejected.

However, the case for ether type of VLAN without following VLAN item
was not validated, allowing the creation of a flow with empty
VLAN item.

To fix this issue a validation was added requiring ether type of VLAN
will be followed with VLAN item.

Fixes: 0b1edd2 ("net/mlx5: refuse empty VLAN flow specification")

Signed-off-by: Shiri Kuzin <shirik@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
  • Loading branch information
Shiri Kuzin authored and bluca committed Feb 4, 2021
1 parent 094f59d commit 045b01f
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/net/mlx5/mlx5_flow_verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1247,6 +1247,7 @@ flow_verbs_validate(struct rte_eth_dev *dev,
uint64_t last_item = 0;
uint8_t next_protocol = 0xff;
uint16_t ether_type = 0;
bool is_empty_vlan = false;

if (items == NULL)
return -1;
Expand Down Expand Up @@ -1274,6 +1275,8 @@ flow_verbs_validate(struct rte_eth_dev *dev,
ether_type &=
((const struct rte_flow_item_eth *)
items->mask)->type;
if (ether_type == RTE_BE16(RTE_ETHER_TYPE_VLAN))
is_empty_vlan = true;
ether_type = rte_be_to_cpu_16(ether_type);
} else {
ether_type = 0;
Expand All @@ -1299,6 +1302,7 @@ flow_verbs_validate(struct rte_eth_dev *dev,
} else {
ether_type = 0;
}
is_empty_vlan = false;
break;
case RTE_FLOW_ITEM_TYPE_IPV4:
ret = mlx5_flow_validate_item_ipv4
Expand Down Expand Up @@ -1410,6 +1414,10 @@ flow_verbs_validate(struct rte_eth_dev *dev,
}
item_flags |= last_item;
}
if (is_empty_vlan)
return rte_flow_error_set(error, ENOTSUP,
RTE_FLOW_ERROR_TYPE_ITEM, NULL,
"VLAN matching without vid specification is not supported");
for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
switch (actions->type) {
case RTE_FLOW_ACTION_TYPE_VOID:
Expand Down

0 comments on commit 045b01f

Please sign in to comment.