| From foo@baz Mon Feb 29 14:33:50 PST 2016 |
| From: Alexander Duyck <aduyck@mirantis.com> |
| Date: Tue, 9 Feb 2016 06:14:43 -0800 |
| Subject: net: Copy inner L3 and L4 headers as unaligned on GRE TEB |
| |
| From: Alexander Duyck <aduyck@mirantis.com> |
| |
| [ Upstream commit 78565208d73ca9b654fb9a6b142214d52eeedfd1 ] |
| |
| This patch corrects the unaligned accesses seen on GRE TEB tunnels when |
| generating hash keys. Specifically what this patch does is make it so that |
| we force the use of skb_copy_bits when the GRE inner headers will be |
| unaligned due to NET_IP_ALIGNED being a non-zero value. |
| |
| Signed-off-by: Alexander Duyck <aduyck@mirantis.com> |
| Acked-by: Tom Herbert <tom@herbertland.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/flow_dissector.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/net/core/flow_dissector.c |
| +++ b/net/core/flow_dissector.c |
| @@ -396,6 +396,13 @@ ip_proto_again: |
| goto out_bad; |
| proto = eth->h_proto; |
| nhoff += sizeof(*eth); |
| + |
| + /* Cap headers that we access via pointers at the |
| + * end of the Ethernet header as our maximum alignment |
| + * at that point is only 2 bytes. |
| + */ |
| + if (NET_IP_ALIGN) |
| + hlen = nhoff; |
| } |
| |
| key_control->flags |= FLOW_DIS_ENCAPSULATION; |