Bug 105091

Summary: ICMP unreachable is not sent when receiving GRE packets on device that has no tunnel interface
Product: Networking Reporter: Isaac Lee (isaac.lee)
Component: IPV4Assignee: Stephen Hemminger (stephen)
Status: NEW ---    
Severity: low CC: isaac.lee, szg00000
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 4.2 Subsystem:
Regression: Yes Bisected commit-id:
Attachments: fix patch

Description Isaac Lee 2015-09-27 22:42:34 UTC
Created attachment 188691 [details]
fix patch

This used to work in version 3.9. In file ip_gre.c, when a GRE packet is received and tunnel lookup returned NULL (ie, no such interface), ipgre_rcv() calls icmp_send() to respond with port unreachable message.

In the latest version, gre_demux.c tries to do the same thing in gre_cisco_rcv(), but icmp_send fails because skb dst entry has been dropped (during parse_gre_header() -> iptunnel_pull_header() ->  skb_dst_drop(skb);) prior to calling icmp_send, causing icmp_send to return early due to rt is NULL.

A fix patch is attached.