]> git.ipfire.org Git - thirdparty/linux.git/commit
batman-adv: frag: disallow unicast fragment in fragment
authorSven Eckelmann <sven@narfation.org>
Wed, 13 May 2026 07:01:36 +0000 (09:01 +0200)
committerSven Eckelmann <sven@narfation.org>
Fri, 15 May 2026 08:41:49 +0000 (10:41 +0200)
commitbc62216dc8e221e3781afa14430f45208bfa9af9
tree8e0bcf37af101f464e9226c42979f8d6ef847fb0
parent6c65cf23d4c6170fcf5714c32aa64689718cb142
batman-adv: frag: disallow unicast fragment in fragment

batadv_frag_skb_buffer() is called by batadv_batman_skb_recv() when a
BATADV_UNICAST_FRAG packet is received. Once all fragments are collected
and the packet is reassembled, batadv_recv_frag_packet() calls
batadv_batman_skb_recv() again to process the defragmented payload.

A malicious sender can craft a BATADV_UNICAST_FRAG packet whose reassembled
payload is itself a BATADV_UNICAST_FRAG packet (matryoshka-style nesting).
Each nesting level recurses through batadv_batman_skb_recv() without bound,
growing the kernel stack until it is exhausted.

Since refragmentation or fragments in fragments are not actually allowed,
discard all packets which are still BATADV_UNICAST_FRAG packets after the
defragmentation process.

Cc: stable@kernel.org
Fixes: 610bfc6bc99b ("batman-adv: Receive fragmented packets and merge")
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Yifan Wu <yifanwucs@gmail.com>
Reported-by: Juefei Pu <tomapufckgml@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Reviewed-by: Yuan Tan <yuantan098@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
net/batman-adv/fragmentation.c