]> git.baikalelectronics.ru Git - kernel.git/commit
gre: fix error handler
authorEric Dumazet <edumazet@google.com>
Wed, 15 Jun 2016 13:24:00 +0000 (06:24 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Jun 2016 05:15:21 +0000 (22:15 -0700)
commit69283ef950abae6d8d12c48223379f127e5c0b15
tree16f807a602e42f6918f9991b0725bc6e26847025
parent6d4cf71f32caef2ed1e3999129ef288f6eafb918
gre: fix error handler

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 ef720e17e3fc ("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: Eric 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: David S. Miller <davem@davemloft.net>
include/net/gre.h
net/ipv4/gre_demux.c
net/ipv4/ip_gre.c
net/ipv6/ip6_gre.c