lkml.org 
[lkml]   [2014]   [Feb]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13 118/140] net: gre: use icmp_hdr() to get inner ip header
    Date
    3.13-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Duan Jiong <duanj.fnst@cn.fujitsu.com>

    [ Upstream commit c0c0c50ff7c3e331c90bab316d21f724fb9e1994 ]

    When dealing with icmp messages, the skb->data points the
    ip header that triggered the sending of the icmp message.

    In gre_cisco_err(), the parse_gre_header() is called, and the
    iptunnel_pull_header() is called to pull the skb at the end of
    the parse_gre_header(), so the skb->data doesn't point the
    inner ip header.

    Unfortunately, the ipgre_err still needs those ip addresses in
    inner ip header to look up tunnel by ip_tunnel_lookup().

    So just use icmp_hdr() to get inner ip header instead of skb->data.

    Signed-off-by: Duan Jiong <duanj.fnst@cn.fujitsu.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv4/ip_gre.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/net/ipv4/ip_gre.c
    +++ b/net/ipv4/ip_gre.c
    @@ -178,7 +178,7 @@ static int ipgre_err(struct sk_buff *skb
    else
    itn = net_generic(net, ipgre_net_id);

    - iph = (const struct iphdr *)skb->data;
    + iph = (const struct iphdr *)(icmp_hdr(skb) + 1);
    t = ip_tunnel_lookup(itn, skb->dev->ifindex, tpi->flags,
    iph->daddr, iph->saddr, tpi->key);




    \
     
     \ /
      Last update: 2014-02-05 04:01    [W:4.061 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site