diff mbox series

ip6_tunnel: Match to ARPHRD_TUNNEL6 for dev type

Message ID 20190401000442.30520-1-sheena.mira-ato@alliedtelesis.co.nz
State Accepted
Delegated to: David Miller
Headers show
Series ip6_tunnel: Match to ARPHRD_TUNNEL6 for dev type | expand

Commit Message

Sheena Mira-ato April 1, 2019, 12:04 a.m. UTC
The device type for ip6 tunnels is set to
ARPHRD_TUNNEL6. However, the ip4ip6_err function
is expecting the device type of the tunnel to be
ARPHRD_TUNNEL.  Since the device types do not
match, the function exits and the ICMP error
packet is not sent to the originating host. Note
that the device type for IPv4 tunnels is set to
ARPHRD_TUNNEL.

Fix is to expect a tunnel device type of
ARPHRD_TUNNEL6 instead.  Now the tunnel device
type matches and the ICMP error packet is sent
to the originating host.

Signed-off-by: Sheena Mira-ato <sheena.mira-ato@alliedtelesis.co.nz>
---
 net/ipv6/ip6_tunnel.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

David Miller April 2, 2019, 8:20 p.m. UTC | #1
From: Sheena Mira-ato <sheena.mira-ato@alliedtelesis.co.nz>
Date: Mon,  1 Apr 2019 13:04:42 +1300

> The device type for ip6 tunnels is set to
> ARPHRD_TUNNEL6. However, the ip4ip6_err function
> is expecting the device type of the tunnel to be
> ARPHRD_TUNNEL.  Since the device types do not
> match, the function exits and the ICMP error
> packet is not sent to the originating host. Note
> that the device type for IPv4 tunnels is set to
> ARPHRD_TUNNEL.
> 
> Fix is to expect a tunnel device type of
> ARPHRD_TUNNEL6 instead.  Now the tunnel device
> type matches and the ICMP error packet is sent
> to the originating host.
> 
> Signed-off-by: Sheena Mira-ato <sheena.mira-ato@alliedtelesis.co.nz>

Applied and queued up for -stable.
diff mbox series

Patch

diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 0c6403cf8b52..ade1390c6348 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -627,7 +627,7 @@  ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
 		rt = ip_route_output_ports(dev_net(skb->dev), &fl4, NULL,
 					   eiph->daddr, eiph->saddr, 0, 0,
 					   IPPROTO_IPIP, RT_TOS(eiph->tos), 0);
-		if (IS_ERR(rt) || rt->dst.dev->type != ARPHRD_TUNNEL) {
+		if (IS_ERR(rt) || rt->dst.dev->type != ARPHRD_TUNNEL6) {
 			if (!IS_ERR(rt))
 				ip_rt_put(rt);
 			goto out;
@@ -636,7 +636,7 @@  ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
 	} else {
 		if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos,
 				   skb2->dev) ||
-		    skb_dst(skb2)->dev->type != ARPHRD_TUNNEL)
+		    skb_dst(skb2)->dev->type != ARPHRD_TUNNEL6)
 			goto out;
 	}