The IP reassembly library tracks only a running byte total and reserved slots for the first and last fragments, with no coverage map. As a result it mishandles duplicate, overlapping, oversized, and misheadered fragments, and the IPv4 key is missing a field RFC 791 requires. There was also no functional test to catch any of it.
These came out of reviewing a duplicate-fragment report on the list. Patches 1 and 2 are interdependent: the overlap discard relies on the duplicate handling so an exact duplicate is dropped on its own rather than discarding the whole datagram. The rest are independent. Patch 6 adds a functional test modeled on the Linux selftest ip_defrag.c. It passes on this series; with any single fix reverted the matching case fails. v3 - drop stable from one patch and reword release note Stephen Hemminger (8): ip_frag: tolerate duplicate fragments ip_frag: discard datagrams with overlapping fragments ip_frag: include protocol in IPv4 reassembly key ip_frag: drop IPv6 fragments with per-fragment headers ip_frag: reject oversized reassembled datagrams app/test: add test for IP reassembly ip_frag: remove use of rte_memcpy doc: add release note about ip_frag changes app/test/meson.build | 1 + app/test/test_reassembly.c | 675 +++++++++++++++++++++++++ doc/guides/rel_notes/release_26_07.rst | 10 + lib/ip_frag/ip_frag_internal.c | 40 +- lib/ip_frag/rte_ipv4_reassembly.c | 17 +- lib/ip_frag/rte_ipv6_fragmentation.c | 3 +- lib/ip_frag/rte_ipv6_reassembly.c | 36 +- 7 files changed, 771 insertions(+), 11 deletions(-) create mode 100644 app/test/test_reassembly.c -- 2.53.0

