• Eric Dumazet's avatar
    gre: fix error handler · e582615a
    Eric Dumazet authored
    1) gre_parse_header() can be called from gre_err()
    
       At this point transport header points to ICMP header, not the inner
    header.
    
    2) We can not really change transport header as ipgre_err() will later
    assume transport header still points to ICMP header (using icmp_hdr())
    
    3) pskb_may_pull() logic in gre_parse_header() really works
      if we are interested at zone pointed by skb->data
    
    4) As Jiri explained in commit b7f8fe25 ("gre: do not pull header in
    ICMP error processing") we should not pull headers in error handler.
    
    So this fix :
    
    A) changes gre_parse_header() to use skb->data instead of
    skb_transport_header()
    
    B) Adds a nhs parameter to gre_parse_header() so that we can skip the
    not pulled IP header from error path.
      This offset is 0 for normal receive path.
    
    C) remove obsolete IPV6 includes
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Tom Herbert <tom@herbertland.com>
    Cc: Maciej Żenczykowski <maze@google.com>
    Cc: Jiri Benc <jbenc@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e582615a
ip_gre.c 31.9 KB