mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-09-21 11:53:01 +00:00
ip_gre: Fix WCCPv2 header parsing.
[ No applicable upstream commit, the upstream implementation is now completely different and doesn't have this bug. ] In case of WCCPv2 GRE header has extra four bytes. Following patch pull those extra four bytes so that skb offsets are set correctly. CC: Eric Dumazet <eric.dumazet@gmail.com> Reported-by: Peter Schmitt <peter.schmitt82@yahoo.de> Tested-by: Peter Schmitt <peter.schmitt82@yahoo.de> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3729ed7c6a
commit
b9099fea22
|
@ -113,7 +113,7 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
|
|||
__be32 key);
|
||||
|
||||
int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
|
||||
const struct tnl_ptk_info *tpi, bool log_ecn_error);
|
||||
const struct tnl_ptk_info *tpi, int hdr_len, bool log_ecn_error);
|
||||
int ip_tunnel_changelink(struct net_device *dev, struct nlattr *tb[],
|
||||
struct ip_tunnel_parm *p);
|
||||
int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[],
|
||||
|
|
|
@ -335,7 +335,7 @@ static int ipgre_rcv(struct sk_buff *skb)
|
|||
iph->saddr, iph->daddr, tpi.key);
|
||||
|
||||
if (tunnel) {
|
||||
ip_tunnel_rcv(tunnel, skb, &tpi, log_ecn_error);
|
||||
ip_tunnel_rcv(tunnel, skb, &tpi, hdr_len, log_ecn_error);
|
||||
return 0;
|
||||
}
|
||||
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
|
||||
|
|
|
@ -402,7 +402,7 @@ static struct ip_tunnel *ip_tunnel_create(struct net *net,
|
|||
}
|
||||
|
||||
int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
|
||||
const struct tnl_ptk_info *tpi, bool log_ecn_error)
|
||||
const struct tnl_ptk_info *tpi, int hdr_len, bool log_ecn_error)
|
||||
{
|
||||
struct pcpu_tstats *tstats;
|
||||
const struct iphdr *iph = ip_hdr(skb);
|
||||
|
@ -413,7 +413,7 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
|
|||
skb->protocol = tpi->proto;
|
||||
|
||||
skb->mac_header = skb->network_header;
|
||||
__pskb_pull(skb, tunnel->hlen);
|
||||
__pskb_pull(skb, hdr_len);
|
||||
skb_postpull_rcsum(skb, skb_transport_header(skb), tunnel->hlen);
|
||||
#ifdef CONFIG_NET_IPGRE_BROADCAST
|
||||
if (ipv4_is_multicast(iph->daddr)) {
|
||||
|
|
|
@ -195,7 +195,7 @@ static int ipip_rcv(struct sk_buff *skb)
|
|||
if (tunnel) {
|
||||
if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
|
||||
goto drop;
|
||||
return ip_tunnel_rcv(tunnel, skb, &tpi, log_ecn_error);
|
||||
return ip_tunnel_rcv(tunnel, skb, &tpi, 0, log_ecn_error);
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
|
Loading…
Reference in a new issue