mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 14:11:20 +00:00
net: check tunnel option type in tunnel flags
Check the tunnel option type stored in tunnel flags when creating options for tunnels. Thereby ensuring we do not set geneve, vxlan or erspan tunnel options on interfaces that are not associated with them. Make sure all users of the infrastructure set correct flags, for the BPF helper we have to set all bits to keep backward compatibility. Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9d7298cd1d
commit
256c87c17c
7 changed files with 23 additions and 7 deletions
|
@ -2516,7 +2516,9 @@ static int validate_and_copy_set_tun(const struct nlattr *attr,
|
|||
struct ovs_tunnel_info *ovs_tun;
|
||||
struct nlattr *a;
|
||||
int err = 0, start, opts_type;
|
||||
__be16 dst_opt_type;
|
||||
|
||||
dst_opt_type = 0;
|
||||
ovs_match_init(&match, &key, true, NULL);
|
||||
opts_type = ip_tun_from_nlattr(nla_data(attr), &match, false, log);
|
||||
if (opts_type < 0)
|
||||
|
@ -2528,10 +2530,13 @@ static int validate_and_copy_set_tun(const struct nlattr *attr,
|
|||
err = validate_geneve_opts(&key);
|
||||
if (err < 0)
|
||||
return err;
|
||||
dst_opt_type = TUNNEL_GENEVE_OPT;
|
||||
break;
|
||||
case OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS:
|
||||
dst_opt_type = TUNNEL_VXLAN_OPT;
|
||||
break;
|
||||
case OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS:
|
||||
dst_opt_type = TUNNEL_ERSPAN_OPT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2574,7 +2579,7 @@ static int validate_and_copy_set_tun(const struct nlattr *attr,
|
|||
*/
|
||||
ip_tunnel_info_opts_set(tun_info,
|
||||
TUN_METADATA_OPTS(&key, key.tun_opts_len),
|
||||
key.tun_opts_len);
|
||||
key.tun_opts_len, dst_opt_type);
|
||||
add_nested_action_end(*sfa, start);
|
||||
|
||||
return err;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue