summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Britstein <elibr@mellanox.com>2019-03-14 15:41:40 +0100
committerSaeed Mahameed <saeedm@mellanox.com>2019-04-05 23:10:34 +0200
commitbf2f3bca1c5dee845e436d8af96ca3811f2aa2f9 (patch)
treef88880a8cb140bd4b508b275a419f2b84c5abcd9
parentnet/mlx5e: Use helpers to get headers criteria and value pointers (diff)
downloadlinux-bf2f3bca1c5dee845e436d8af96ca3811f2aa2f9.tar.xz
linux-bf2f3bca1c5dee845e436d8af96ca3811f2aa2f9.zip
net/mlx5e: Deny VLAN rewrite if there is no VLAN header match
Rewrite of the packet in the VLAN offset may corrupt the packet if it's not VLAN tagged. Deny the rewrite in this case. Fixes: 37410902874c ("net/mlx5e: Support VLAN modify action") Signed-off-by: Eli Britstein <elibr@mellanox.com> Reviewed-by: Roi Dayan <roid@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 81f8ac569a0e..3a0854fbcfd4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -2292,8 +2292,19 @@ static int add_vlan_rewrite_action(struct mlx5e_priv *priv, int namespace,
.mangle.mask = ~(u32)be16_to_cpu(*(__be16 *)&mask16),
.mangle.val = (u32)be16_to_cpu(*(__be16 *)&val16),
};
+ void *headers_c, *headers_v;
int err;
+ headers_c = get_match_headers_criteria(*action, &parse_attr->spec);
+ headers_v = get_match_headers_value(*action, &parse_attr->spec);
+
+ if (!(MLX5_GET(fte_match_set_lyr_2_4, headers_c, cvlan_tag) &&
+ MLX5_GET(fte_match_set_lyr_2_4, headers_v, cvlan_tag))) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "VLAN rewrite action must have VLAN protocol match");
+ return -EOPNOTSUPP;
+ }
+
if (act->vlan.prio) {
NL_SET_ERR_MSG_MOD(extack, "Setting VLAN prio is not supported");
return -EOPNOTSUPP;