From 1080d5f8400c9b65dec1fbff20cdeaa1052c4a8f Mon Sep 17 00:00:00 2001 From: zador-blood-stained Date: Sun, 11 Jun 2017 16:25:10 +0300 Subject: [PATCH] Add ipsec fix for stable mainline kernels (#693) --- patch/kernel/mvebu-next/fix-net-esp4.patch | 27 ++++++++++++++++++++++ patch/kernel/sunxi-next/fix-net-esp4.patch | 27 ++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 patch/kernel/mvebu-next/fix-net-esp4.patch create mode 100644 patch/kernel/sunxi-next/fix-net-esp4.patch diff --git a/patch/kernel/mvebu-next/fix-net-esp4.patch b/patch/kernel/mvebu-next/fix-net-esp4.patch new file mode 100644 index 0000000000..9bd5ae40d6 --- /dev/null +++ b/patch/kernel/mvebu-next/fix-net-esp4.patch @@ -0,0 +1,27 @@ +diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c +index b1e24446..0693ab61 100644 +--- a/net/ipv4/esp4.c ++++ b/net/ipv4/esp4.c +@@ -222,6 +222,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) + int assoclen; + int extralen; + int tailen; ++ int esph_offset; + __be64 seqno; + __u8 proto = *skb_mac_header(skb); + +@@ -392,12 +393,13 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) + } + + cow: ++ esph_offset = (unsigned char *)esph - skb_transport_header(skb); + err = skb_cow_data(skb, tailen, &trailer); + if (err < 0) + goto error; + nfrags = err; + tail = skb_tail_pointer(trailer); +- esph = ip_esp_hdr(skb); ++ esph = (struct ip_esp_hdr *)(skb_transport_header(skb) + esph_offset); + + skip_cow: + esp_output_fill_trailer(tail, tfclen, plen, proto); diff --git a/patch/kernel/sunxi-next/fix-net-esp4.patch b/patch/kernel/sunxi-next/fix-net-esp4.patch new file mode 100644 index 0000000000..9bd5ae40d6 --- /dev/null +++ b/patch/kernel/sunxi-next/fix-net-esp4.patch @@ -0,0 +1,27 @@ +diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c +index b1e24446..0693ab61 100644 +--- a/net/ipv4/esp4.c ++++ b/net/ipv4/esp4.c +@@ -222,6 +222,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) + int assoclen; + int extralen; + int tailen; ++ int esph_offset; + __be64 seqno; + __u8 proto = *skb_mac_header(skb); + +@@ -392,12 +393,13 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) + } + + cow: ++ esph_offset = (unsigned char *)esph - skb_transport_header(skb); + err = skb_cow_data(skb, tailen, &trailer); + if (err < 0) + goto error; + nfrags = err; + tail = skb_tail_pointer(trailer); +- esph = ip_esp_hdr(skb); ++ esph = (struct ip_esp_hdr *)(skb_transport_header(skb) + esph_offset); + + skip_cow: + esp_output_fill_trailer(tail, tfclen, plen, proto);