struct ip_auth_hdr {
--- a/include/uapi/linux/ipv6.h
+++ b/include/uapi/linux/ipv6.h
+@@ -104,7 +104,7 @@ struct ipv6_destopt_hao {
+ __u8 type;
+ __u8 length;
+ struct in6_addr addr;
+-} __attribute__((packed));
++} __attribute__((packed, aligned(2)));
+
+ /*
+ * IPv6 fixed header
@@ -131,7 +131,7 @@ struct ipv6hdr {
struct in6_addr saddr;
*/
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
-@@ -485,7 +485,7 @@ int ipv6_recv_error(struct sock *sk, str
+@@ -486,7 +486,7 @@ int ipv6_recv_error(struct sock *sk, str
ipv6_iface_scope_id(&sin->sin6_addr,
IP6CB(skb)->iif);
} else {
&sin->sin6_addr);
sin->sin6_scope_id = 0;
}
-@@ -836,12 +836,12 @@ int ip6_datagram_send_ctl(struct net *ne
+@@ -835,12 +835,12 @@ int ip6_datagram_send_ctl(struct net *ne
}
if (fl6->flowlabel&IPV6_FLOWINFO_MASK) {
#endif /* _LINUX_TYPES_H */
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
-@@ -1351,8 +1351,8 @@ struct sk_buff **inet_gro_receive(struct
+@@ -1352,8 +1352,8 @@ struct sk_buff **inet_gro_receive(struct
if (unlikely(ip_fast_csum((u8 *)iph, 5)))
goto out_unlock;
memcpy(p, foc->val, foc->len);
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
-@@ -537,7 +537,7 @@ static struct sk_buff *add_grec(struct s
+@@ -548,7 +548,7 @@ static struct sk_buff *add_grec(struct s
if (!skb)
return NULL;
psrc = skb_put(skb, sizeof(__be32));
#define IGMP_HOST_MEMBERSHIP_REPORT 0x12 /* Ditto */
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
-@@ -108,7 +108,7 @@ __be32 __skb_flow_get_ports(const struct
+@@ -109,7 +109,7 @@ __be32 __skb_flow_get_ports(const struct
ports = __skb_header_pointer(skb, thoff + poff,
sizeof(_ports), data, hlen, &_ports);
if (ports)
goto next_ht;
--- a/net/ipv6/ip6_offload.c
+++ b/net/ipv6/ip6_offload.c
-@@ -220,7 +220,7 @@ static struct sk_buff **ipv6_gro_receive
+@@ -221,7 +221,7 @@ static struct sk_buff **ipv6_gro_receive
continue;
iph2 = (struct ipv6hdr *)(p->data + off);
#define IP6_MF 0x0001
#define IP6_OFFSET 0xFFF8
-@@ -444,8 +444,8 @@ static inline void __ipv6_addr_set_half(
+@@ -437,8 +437,8 @@ static inline void __ipv6_addr_set_half(
}
#endif
#endif
}
static inline void ipv6_addr_set(struct in6_addr *addr,
-@@ -504,6 +504,8 @@ static inline bool ipv6_prefix_equal(con
+@@ -497,6 +497,8 @@ static inline bool ipv6_prefix_equal(con
const __be32 *a1 = addr1->s6_addr32;
const __be32 *a2 = addr2->s6_addr32;
unsigned int pdw, pbi;
/* check complete u32 in prefix */
pdw = prefixlen >> 5;
-@@ -512,7 +514,9 @@ static inline bool ipv6_prefix_equal(con
+@@ -505,7 +507,9 @@ static inline bool ipv6_prefix_equal(con
/* check incomplete u32 in prefix */
pbi = prefixlen & 0x1f;
return false;
return true;
-@@ -656,13 +660,13 @@ static inline void ipv6_addr_set_v4mappe
+@@ -605,13 +609,13 @@ static inline void ipv6_addr_set_v4mappe
*/
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
{
if (xb)
return i * 32 + 31 - __fls(ntohl(xb));
}
-@@ -831,17 +835,18 @@ static inline int ip6_default_np_autolab
+@@ -780,17 +784,18 @@ static inline int ip6_default_np_autolab
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
__be32 flowlabel)
{
EXPORT_SYMBOL(xfrm_parse_spi);
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
-@@ -3858,14 +3858,16 @@ static bool tcp_parse_aligned_timestamp(
+@@ -3874,14 +3874,16 @@ static bool tcp_parse_aligned_timestamp(
{
const __be32 *ptr = (const __be32 *)(th + 1);
*sum = csum_fold(csum_partial(diff, sizeof(diff),
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
-@@ -1857,15 +1857,15 @@ static int vxlan_build_skb(struct sk_buf
+@@ -1868,15 +1868,15 @@ static int vxlan_build_skb(struct sk_buf
return err;
vxh = __skb_push(skb, sizeof(*vxh));