linux/drivers/firewire
Ruoyu Wang d52a13adbb firewire: net: Fix fragmented datagram reassembly
fwnet_frag_new() keeps a sorted list of received fragments for a partial
datagram. When a new fragment is adjacent to an existing fragment, the
code checks whether the new fragment also closes the gap to the next or
previous list entry.

Those neighbor lookups currently assume that the current fragment always
has a real next or previous fragment. At a list edge, the next or
previous entry is the list head, not a struct fwnet_fragment_info.

The gap checks also compare against the old edge of the current fragment
instead of the edge after adding the new fragment. As a result, a
fragment that bridges two existing ranges may leave two adjacent ranges
unmerged, so fwnet_pd_is_complete() can miss a complete datagram.

Check for the list head before looking up the neighboring fragment, and
compare the neighbor against the new fragment's far edge when deciding
whether to merge all three ranges.

This issue was found by a static analysis checker and confirmed by
manual source review.

Fixes: c76acec6d5 ("firewire: add IPv4 support")
Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
Link: https://lore.kernel.org/r/20260707150454.2265951-1-ruoyuw560@gmail.com
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2026-07-13 20:19:06 +09:00
..
.kunitconfig firewire: ohci: add static inline functions to deserialize for Self-ID DMA operation 2024-07-04 08:12:48 +09:00
core-card.c firewire: core: provide isoc header buffer size outside card driver 2026-01-18 17:18:48 +09:00
core-cdev.c firewire: core: cancel using delayed work for iso_resource_once management 2026-05-21 18:43:25 +09:00
core-device.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
core-iso.c Convert remaining multi-line kmalloc_obj/flex GFP_KERNEL uses 2026-02-22 08:26:33 -08:00
core-topology.c firewire: core: Open-code topology list walk 2026-06-13 11:10:23 +09:00
core-trace.c firewire: core: move copy_port_status() helper function to TP_fast_assign() block 2024-07-12 14:34:12 +09:00
core-transaction.c firewire: core: fix race condition against transaction list 2026-01-29 08:03:55 +09:00
core.h firewire: core: provide isoc header buffer size outside card driver 2026-01-18 17:18:48 +09:00
device-attribute-test.c firewire: test: Fix potential null dereference in firewire kunit test 2025-01-13 10:31:27 +09:00
init_ohci1394_dma.c firewire: init_ohci1394_dma: add missing function parameter documentation 2025-10-25 08:29:56 +09:00
Kconfig PCI: Add CONFIG_MMU dependency 2025-04-23 15:40:30 -05:00
Makefile firewire: ohci: add static inline functions to deserialize for Self-ID DMA operation 2024-07-04 08:12:48 +09:00
net.c firewire: net: Fix fragmented datagram reassembly 2026-07-13 20:19:06 +09:00
nosy-user.h
nosy.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nosy.h
ohci-serdes-test.c firewire: ohci: add static inline functions to serialize/deserialize data of IT DMA 2024-08-02 09:36:05 +09:00
ohci.c firewire: ohci: initialize page array to use alloc_pages_bulk() correctly 2026-02-28 10:09:24 -08:00
ohci.h firewire: ohci: add static inline functions to serialize/deserialize data of IT DMA 2024-08-02 09:36:05 +09:00
packet-header-definitions.h firewire: core: arrangement header inclusion for tracepoints events 2024-06-17 08:37:03 +09:00
packet-serdes-test.c firewire: core: add tests for serialization/deserialization of phy config packet 2024-06-17 08:37:03 +09:00
phy-packet-definitions.h firewire: core: add tests for serialization/deserialization of phy config packet 2024-06-17 08:37:03 +09:00
sbp2.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
self-id-sequence-helper-test.c firewire: core: add helper function to handle port status from self ID sequence and its KUnit test 2024-06-17 08:37:02 +09:00
uapi-test.c firewire: add missing MODULE_DESCRIPTION() to test modules 2024-05-27 07:34:58 +09:00