CVE-2026-89951 PUBLISHED

batman-adv: fix stale receive device on merged fragments

Assigner: Linux
Reserved: 11.09.2026 Published: 16.09.2026 Updated: 16.09.2026

In the Linux kernel, the following vulnerability has been resolved:

batman-adv: fix stale receive device on merged fragments

Fragment reassembly reuses the skb from the highest-numbered buffered fragment as the merged packet. When that fragment was received on a hard interface which is deleted before the chain completes, the merged skb can re-enter the receive path with a stale skb->dev and skb_iif.

batadv_batman_skb_recv() passes such merged packets through the normal receive handlers again. DAT and bridge loop avoidance both derive the ARP header length from skb->dev, so they can dereference the freed net_device before the packet reaches the local mesh interface.

Refresh the receive device metadata from the current receive device before running the packet handlers. This keeps internally reinjected merged fragments consistent with the normal receive path after hard interface teardown.

Metrics

CVSS Vector: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 8.8

AV:A - Merged BATADV_UNICAST_FRAG packets re-enter batadv_batman_skb_recv() after ETH_P_BATMAN receive on a mesh hard interface; an attacker must inject those frames on the same L2 mesh segment (WiFi IBSS/802.11s, Ethernet backbone, or community-mesh overlay), not via arbitrary Internet routing. AC:L - The attacker fully controls fragment headers, inner ARP payload, and both send steps (buffer the highest-numbered fragment, then complete the chain on a remaining active hard interface). In-window fragments are not purged on NETDEV_UNREGISTER, so the stale skb->dev UAF needs no uninfluenceable heap layout. PR:N - batadv_batman_skb_recv() is an unauthenticated packet_type handler; any adjacent mesh peer can send BATADV_UNICAST_FRAG frames. Originator presence is obtained by sending OGMs or spoofing a MAC learned from the mesh, with no local account or CAP_NET_ADMIN on the victim. UI:N - Exploitation requires only attacker-sent mesh fragments; the kernel buffers, merges, and runs DAT ARP parsing in NET_RX_SOFTIRQ without any victim click, mount, or extra administrative action at exploit time. S:U - The use-after-free is of a kernel net_device in batman-adv on the victim host and does not cross a VM/host, IOMMU, or sandbox security authority. C:H - After hard-interface unregister, batadv_arp_get_type() calls arp_hdr_len(skb->dev) on the merged skb and reads a freed net_device. A kernel-object UAF is high confidentiality impact because reclaim/spray of that object can disclose heap contents. I:H - This is a use-after-free of struct net_device on the fragment-merge receive path. Heap spraying the freed object yields attacker-controlled device fields consumed during packet parsing, a memory-corruption primitive suitable for integrity compromise or control-flow hijacking. A:H - Dereferencing a freed net_device from NET_RX_SOFTIRQ can oops, panic, or hang when the object is poisoned or unmapped, denying mesh and host availability even without a full exploit.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to 63d86250fa7cbe22451369bd1c0881dfc8190958 (excl.)
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to f830c2dfc1431764db9256b3d5db1695fc9a7f56 (excl.)
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to f4b4ae763b5d59319fad62a00c76676758e7dafa (excl.)
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to 6df64825f8b199921120c685af2abca14b077331 (excl.)
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to a2c272da99c2077088083c14961cf2f1e4506995 (excl.)
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to e91d2cc7441d89a45bad73ad9789159c7441cb80 (excl.)
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to 2dffc8c44b6e3347b3719c6419c07b4a18fea895 (excl.)
  • affected from 610bfc6bc99bc83680d190ebc69359a05fc7f605 to ad46c907d7d9975a285c1e89a4adde652eaa93f5 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 3.13 is affected
  • unaffected from 0 to 3.13 (excl.)
  • unaffected from 5.10.270 to 5.10.* (incl.)
  • unaffected from 5.15.221 to 5.15.* (incl.)
  • unaffected from 6.1.188 to 6.1.* (incl.)
  • unaffected from 6.6.157 to 6.6.* (incl.)
  • unaffected from 6.12.110 to 6.12.* (incl.)
  • unaffected from 6.18.51 to 6.18.* (incl.)
  • unaffected from 7.2.5 to 7.2.* (incl.)
  • unaffected from 7.3-rc1 to * (incl.)

References