diff options
author | Haishuang Yan | 2019-07-24 14:00:42 +0200 |
---|---|---|
committer | Greg Kroah-Hartman | 2019-08-09 17:52:30 +0200 |
commit | fdcefa46c5c22fdff4960c6bdabf245af667ceaf (patch) | |
tree | 791cb4fc71d066c9f1f7dcf5245af89343076efd | |
parent | ife: error out when nla attributes are empty (diff) | |
download | kernel-qcow2-linux-fdcefa46c5c22fdff4960c6bdabf245af667ceaf.tar.gz kernel-qcow2-linux-fdcefa46c5c22fdff4960c6bdabf245af667ceaf.tar.xz kernel-qcow2-linux-fdcefa46c5c22fdff4960c6bdabf245af667ceaf.zip |
ip6_gre: reload ipv6h in prepare_ip6gre_xmit_ipv6
[ Upstream commit 3bc817d665ac6d9de89f59df522ad86f5b5dfc03 ]
Since ip6_tnl_parse_tlv_enc_lim() can call pskb_may_pull()
which may change skb->data, so we need to re-load ipv6h at
the right place.
Fixes: 898b29798e36 ("ip6_gre: Refactor ip6gre xmit codes")
Cc: William Tu <u9012063@gmail.com>
Signed-off-by: Haishuang Yan <yanhaishuang@cmss.chinamobile.com>
Acked-by: William Tu <u9012063@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | net/ipv6/ip6_gre.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index 01ecd510014f..a53ef079a539 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -680,12 +680,13 @@ static int prepare_ip6gre_xmit_ipv6(struct sk_buff *skb, struct flowi6 *fl6, __u8 *dsfield, int *encap_limit) { - struct ipv6hdr *ipv6h = ipv6_hdr(skb); + struct ipv6hdr *ipv6h; struct ip6_tnl *t = netdev_priv(dev); __u16 offset; offset = ip6_tnl_parse_tlv_enc_lim(skb, skb_network_header(skb)); /* ip6_tnl_parse_tlv_enc_lim() might have reallocated skb->head */ + ipv6h = ipv6_hdr(skb); if (offset > 0) { struct ipv6_tlv_tnl_enc_lim *tel; |