char                    cb[48] __aligned(8);
  
        unsigned long           _skb_refdst;
 +      void                    (*destructor)(struct sk_buff *skb);
  #ifdef CONFIG_XFRM
        struct  sec_path        *sp;
- #ifdef CONFIG_BRIDGE_NETFILTER
 +#endif
 +#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
 +      struct nf_conntrack     *nfct;
 +#endif
++#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
 +      struct nf_bridge_info   *nf_bridge;
  #endif
        unsigned int            len,
                                data_len;
        __u16                   mac_len,
                                hdr_len;
 -      union {
 -              __wsum          csum;
 -              struct {
 -                      __u16   csum_start;
 -                      __u16   csum_offset;
 -              };
 -      };
 -      __u32                   priority;
 +
 +      /* Following fields are _not_ copied in __copy_skb_header()
 +       * Note that queue_mapping is here mostly to fill a hole.
 +       */
        kmemcheck_bitfield_begin(flags1);
 -      __u8                    ignore_df:1,
 -                              cloned:1,
 -                              ip_summed:2,
 +      __u16                   queue_mapping;
 +      __u8                    cloned:1,
                                nohdr:1,
 -                              nfctinfo:3;
 -      __u8                    pkt_type:3,
                                fclone:2,
 -                              ipvs_property:1,
                                peeked:1,
 -                              nf_trace:1;
 +                              head_frag:1,
 +                              xmit_more:1;
 +      /* one bit hole */
        kmemcheck_bitfield_end(flags1);
 -      __be16                  protocol;
 -
 -      void                    (*destructor)(struct sk_buff *skb);
 -#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
 -      struct nf_conntrack     *nfct;
 -#endif
 -#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
 -      struct nf_bridge_info   *nf_bridge;
 -#endif
  
 -      int                     skb_iif;
--
 -      __u32                   hash;
--
 -      __be16                  vlan_proto;
 -      __u16                   vlan_tci;
 +      /* fields enclosed in headers_start/headers_end are copied
 +       * using a single memcpy() in __copy_skb_header()
 +       */
 +      __u32                   headers_start[0];
  
 -#ifdef CONFIG_NET_SCHED
 -      __u16                   tc_index;       /* traffic control index */
 -#ifdef CONFIG_NET_CLS_ACT
 -      __u16                   tc_verd;        /* traffic control verdict */
 -#endif
 +/* if you move pkt_type around you also must adapt those constants */
 +#ifdef __BIG_ENDIAN_BITFIELD
 +#define PKT_TYPE_MAX  (7 << 5)
 +#else
 +#define PKT_TYPE_MAX  7
  #endif
 +#define PKT_TYPE_OFFSET()     offsetof(struct sk_buff, __pkt_type_offset)
  
 -      __u16                   queue_mapping;
 -      kmemcheck_bitfield_begin(flags2);
 -      __u8                    xmit_more:1;
 -#ifdef CONFIG_IPV6_NDISC_NODETYPE
 -      __u8                    ndisc_nodetype:2;
 -#endif
 +      __u8                    __pkt_type_offset[0];
 +      __u8                    pkt_type:3;
        __u8                    pfmemalloc:1;
 +      __u8                    ignore_df:1;
 +      __u8                    nfctinfo:3;
 +
 +      __u8                    nf_trace:1;
 +      __u8                    ip_summed:2;
        __u8                    ooo_okay:1;
        __u8                    l4_hash:1;
        __u8                    sw_hash:1;
  #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
        dst->nfct = src->nfct;
        nf_conntrack_get(src->nfct);
 -      dst->nfctinfo = src->nfctinfo;
 +      if (copy)
 +              dst->nfctinfo = src->nfctinfo;
  #endif
- #ifdef CONFIG_BRIDGE_NETFILTER
+ #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
        dst->nf_bridge  = src->nf_bridge;
        nf_bridge_get(src->nf_bridge);
  #endif
  #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
        nf_conntrack_put(dst->nfct);
  #endif
- #ifdef CONFIG_BRIDGE_NETFILTER
+ #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
        nf_bridge_put(dst->nf_bridge);
  #endif
 -      __nf_copy(dst, src);
 +      __nf_copy(dst, src, true);
  }
  
  #ifdef CONFIG_NETWORK_SECMARK