diff options
-rw-r--r-- | drivers/net/vxlan.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 0d862a5077ab..c55e316373a1 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -871,6 +871,9 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], | |||
871 | if (err) | 871 | if (err) |
872 | return err; | 872 | return err; |
873 | 873 | ||
874 | if (vxlan->default_dst.remote_ip.sa.sa_family != ip.sa.sa_family) | ||
875 | return -EAFNOSUPPORT; | ||
876 | |||
874 | spin_lock_bh(&vxlan->hash_lock); | 877 | spin_lock_bh(&vxlan->hash_lock); |
875 | err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags, | 878 | err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags, |
876 | port, vni, ifindex, ndm->ndm_flags); | 879 | port, vni, ifindex, ndm->ndm_flags); |
@@ -2601,9 +2604,10 @@ static int vxlan_newlink(struct net *net, struct net_device *dev, | |||
2601 | vni = nla_get_u32(data[IFLA_VXLAN_ID]); | 2604 | vni = nla_get_u32(data[IFLA_VXLAN_ID]); |
2602 | dst->remote_vni = vni; | 2605 | dst->remote_vni = vni; |
2603 | 2606 | ||
2607 | /* Unless IPv6 is explicitly requested, assume IPv4 */ | ||
2608 | dst->remote_ip.sa.sa_family = AF_INET; | ||
2604 | if (data[IFLA_VXLAN_GROUP]) { | 2609 | if (data[IFLA_VXLAN_GROUP]) { |
2605 | dst->remote_ip.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_GROUP]); | 2610 | dst->remote_ip.sin.sin_addr.s_addr = nla_get_be32(data[IFLA_VXLAN_GROUP]); |
2606 | dst->remote_ip.sa.sa_family = AF_INET; | ||
2607 | } else if (data[IFLA_VXLAN_GROUP6]) { | 2611 | } else if (data[IFLA_VXLAN_GROUP6]) { |
2608 | if (!IS_ENABLED(CONFIG_IPV6)) | 2612 | if (!IS_ENABLED(CONFIG_IPV6)) |
2609 | return -EPFNOSUPPORT; | 2613 | return -EPFNOSUPPORT; |