--- zzzz-none-000/linux-4.4.271/net/ipv6/netfilter/nf_conntrack_reasm.c 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/net/ipv6/netfilter/nf_conntrack_reasm.c 2023-04-19 10:22:30.000000000 +0000 @@ -576,6 +576,23 @@ hdr = ipv6_hdr(clone); fhdr = (struct frag_hdr *)skb_transport_header(clone); +#if IS_ENABLED(CONFIG_NF_IPV6_DUMMY_HEADER) + /* + * Revoke dummy header removal by IPv6 reassembly code. + * + * Fragment header with MF and fragment offset field as 0, is a + * dummy fragment header. + * + * MAP-T's RFC mandates CE to add the dummy header in packets and + * adds its identification in its ID field. This field should be + * conserved and delivered to BR, which uses it to identify the + * particular CE. + */ + if (unlikely((fhdr->frag_off & htons(IP6_OFFSET | IP6_MF)) == 0)) { + goto ret_orig; + } +#endif + if (clone->len - skb_network_offset(clone) < IPV6_MIN_MTU && fhdr->frag_off & htons(IP6_MF)) goto ret_orig;