diff options
| author | David S. Miller <davem@davemloft.net> | 2014-04-12 17:03:20 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-04-12 17:03:20 -0400 |
| commit | eda43ce03919f2b929a884fddbefa98cfb04fec9 (patch) | |
| tree | f48369e48fdf6aec5d1916537e6f08574e0526d0 | |
| parent | 810d8cedcc880dca8b64e05fe1331ab5d4f8d992 (diff) | |
| parent | 8d89dcdf80d88007647945a753821a06eb6cc5a5 (diff) | |
Merge branch 'tunnels'
Nicolas Dichtel says:
====================
tunnels: don't allow to add the same tunnel twice
This series fixes the check of an existing tunnel with the same
parameters when a new tunnel is added. I've checked all users of
ip_tunnel_newlink(): gre, gretap, ipip and vti. The bug exists only
for gre and vti.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/ipv4/ip_gre.c | 2 | ||||
| -rw-r--r-- | net/ipv4/ip_vti.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index ec4f762efda5..94213c891565 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
| @@ -463,6 +463,7 @@ static const struct net_device_ops ipgre_netdev_ops = { | |||
| 463 | static void ipgre_tunnel_setup(struct net_device *dev) | 463 | static void ipgre_tunnel_setup(struct net_device *dev) |
| 464 | { | 464 | { |
| 465 | dev->netdev_ops = &ipgre_netdev_ops; | 465 | dev->netdev_ops = &ipgre_netdev_ops; |
| 466 | dev->type = ARPHRD_IPGRE; | ||
| 466 | ip_tunnel_setup(dev, ipgre_net_id); | 467 | ip_tunnel_setup(dev, ipgre_net_id); |
| 467 | } | 468 | } |
| 468 | 469 | ||
| @@ -501,7 +502,6 @@ static int ipgre_tunnel_init(struct net_device *dev) | |||
| 501 | memcpy(dev->dev_addr, &iph->saddr, 4); | 502 | memcpy(dev->dev_addr, &iph->saddr, 4); |
| 502 | memcpy(dev->broadcast, &iph->daddr, 4); | 503 | memcpy(dev->broadcast, &iph->daddr, 4); |
| 503 | 504 | ||
| 504 | dev->type = ARPHRD_IPGRE; | ||
| 505 | dev->flags = IFF_NOARP; | 505 | dev->flags = IFF_NOARP; |
| 506 | dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; | 506 | dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; |
| 507 | dev->addr_len = 4; | 507 | dev->addr_len = 4; |
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index 687ddef4e574..afcee51b90ed 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c | |||
| @@ -337,6 +337,7 @@ static const struct net_device_ops vti_netdev_ops = { | |||
| 337 | static void vti_tunnel_setup(struct net_device *dev) | 337 | static void vti_tunnel_setup(struct net_device *dev) |
| 338 | { | 338 | { |
| 339 | dev->netdev_ops = &vti_netdev_ops; | 339 | dev->netdev_ops = &vti_netdev_ops; |
| 340 | dev->type = ARPHRD_TUNNEL; | ||
| 340 | ip_tunnel_setup(dev, vti_net_id); | 341 | ip_tunnel_setup(dev, vti_net_id); |
| 341 | } | 342 | } |
| 342 | 343 | ||
| @@ -348,7 +349,6 @@ static int vti_tunnel_init(struct net_device *dev) | |||
| 348 | memcpy(dev->dev_addr, &iph->saddr, 4); | 349 | memcpy(dev->dev_addr, &iph->saddr, 4); |
| 349 | memcpy(dev->broadcast, &iph->daddr, 4); | 350 | memcpy(dev->broadcast, &iph->daddr, 4); |
| 350 | 351 | ||
| 351 | dev->type = ARPHRD_TUNNEL; | ||
| 352 | dev->hard_header_len = LL_MAX_HEADER + sizeof(struct iphdr); | 352 | dev->hard_header_len = LL_MAX_HEADER + sizeof(struct iphdr); |
| 353 | dev->mtu = ETH_DATA_LEN; | 353 | dev->mtu = ETH_DATA_LEN; |
| 354 | dev->flags = IFF_NOARP; | 354 | dev->flags = IFF_NOARP; |
