/*
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
-@@ -3842,13 +3842,14 @@ static bool tcp_parse_aligned_timestamp(
+@@ -3847,13 +3847,14 @@ static bool tcp_parse_aligned_timestamp(
{
const __be32 *ptr = (const __be32 *)(th + 1);
#include <asm/uaccess.h>
#include <linux/proc_fs.h>
-@@ -851,10 +852,10 @@ static void tcp_v6_send_response(struct
+@@ -851,10 +852,10 @@ static void tcp_v6_send_response(struct
topt = (__be32 *)(t1 + 1);
if (ts) {
if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
fl6.flowi6_mark = skb->mark;
-@@ -1256,7 +1256,7 @@ static int ip6gre_header(struct sk_buff
+@@ -1256,7 +1256,7 @@ static int ip6gre_header(struct sk_buff
struct ipv6hdr *ipv6h = (struct ipv6hdr *)skb_push(skb, t->hlen);
__be16 *p = (__be16 *)(ipv6h+1);
}
static inline struct neighbour *__ipv6_neigh_lookup(struct neigh_table *tbl, struct net_device *dev, const void *pkey)
+--- a/net/sched/cls_u32.c
++++ b/net/sched/cls_u32.c
+@@ -142,7 +142,7 @@ next_knode:
+ data = skb_header_pointer(skb, toff, 4, &hdata);
+ if (!data)
+ goto out;
+- if ((*data ^ key->val) & key->mask) {
++ if ((net_hdr_word(data) ^ key->val) & key->mask) {
+ n = n->next;
+ goto next_knode;
+ }
+@@ -193,8 +193,8 @@ check_terminal:
+ &hdata);
+ if (!data)
+ goto out;
+- sel = ht->divisor & u32_hash_fold(*data, &n->sel,
+- n->fshift);
++ sel = ht->divisor & u32_hash_fold(net_hdr_word(data),
++ &n->sel, n->fshift);
+ }
+ if (!(n->sel.flags & (TC_U32_VAROFFSET | TC_U32_OFFSET | TC_U32_EAT)))
+ goto next_ht;