--- zzzz-none-000/linux-5.4.213/net/ipv6/netfilter/nf_conntrack_reasm.c 2022-09-15 10:04:56.000000000 +0000 +++ alder-5690pro-762/linux-5.4.213/net/ipv6/netfilter/nf_conntrack_reasm.c 2024-08-14 09:02:13.000000000 +0000 @@ -461,6 +461,24 @@ hdr = ipv6_hdr(skb); fhdr = (struct frag_hdr *)skb_transport_header(skb); +#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)) { + /* TODO: Should we return 0 or something else?*/ + return 0; + } +#endif + skb_orphan(skb); fq = fq_find(net, fhdr->identification, user, hdr, skb->dev ? skb->dev->ifindex : 0);