ip_gre: fix msg_name parsing for recvfrom/recvmsg
authorTimo Teräs <timo.teras@iki.fi>
Mon, 16 Dec 2013 09:02:09 +0000 (11:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Jan 2014 23:28:48 +0000 (15:28 -0800)
[ Upstream commit 0e3da5bb8da45890b1dc413404e0f978ab71173e ]

ipgre_header_parse() needs to parse the tunnel's ip header and it
uses mac_header to locate the iphdr. This got broken when gre tunneling
was refactored as mac_header is no longer updated to point to iphdr.
Introduce skb_pop_mac_header() helper to do the mac_header assignment
and use it in ipgre_rcv() to fix msg_name parsing.

Bug introduced in commit c54419321455 (GRE: Refactor GRE tunneling code.)

Cc: Pravin B Shelar <pshelar@nicira.com>
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/ipv4/ip_gre.c

index 64e4e98..828b2e8 100644 (file)
@@ -335,6 +335,7 @@ static int ipgre_rcv(struct sk_buff *skb)
                                  iph->saddr, iph->daddr, tpi.key);
 
        if (tunnel) {
+               skb_pop_mac_header(skb);
                ip_tunnel_rcv(tunnel, skb, &tpi, hdr_len, log_ecn_error);
                return 0;
        }