summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorHaishuang Yan2019-07-24 14:00:42 +0200
committerGreg Kroah-Hartman2019-08-09 17:52:30 +0200
commitfdcefa46c5c22fdff4960c6bdabf245af667ceaf (patch)
tree791cb4fc71d066c9f1f7dcf5245af89343076efd /net
parentife: error out when nla attributes are empty (diff)
downloadkernel-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>
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/ip6_gre.c3
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;