ip6_tunnel: Match to ARPHRD_TUNNEL6 for dev type
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> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1d3ff0950e
commit
b2e54b09a3
|
@ -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,
|
rt = ip_route_output_ports(dev_net(skb->dev), &fl4, NULL,
|
||||||
eiph->daddr, eiph->saddr, 0, 0,
|
eiph->daddr, eiph->saddr, 0, 0,
|
||||||
IPPROTO_IPIP, RT_TOS(eiph->tos), 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))
|
if (!IS_ERR(rt))
|
||||||
ip_rt_put(rt);
|
ip_rt_put(rt);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -636,7 +636,7 @@ ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||||
} else {
|
} else {
|
||||||
if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos,
|
if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos,
|
||||||
skb2->dev) ||
|
skb2->dev) ||
|
||||||
skb_dst(skb2)->dev->type != ARPHRD_TUNNEL)
|
skb_dst(skb2)->dev->type != ARPHRD_TUNNEL6)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue