Direct naar de inhoud
⚡ Kritieke cyberalerts voor jouw sector & systemen — direct in je inbox. Aanmelden →
CVE's Videos Dagbriefing

← Terug naar CVE-database

CVE-2026-99028

NONE Gepubliceerd:

Beschrijving NL

In de Linux-kernel is de volgende kwetsbaarheid verholpen:

net: xilinx: axienet: Vrijgeven van openstaande DMA-buffers bij het stoppen van dmaengine

In het dmaengine-pad dient de driver vooraf RX-buffers in en houdt deze vast.
in-flight TX-buffers waarvan de SKB's door de driver via DMA worden toegewezen en vrijgegeven.
alleen in de voltooiingscallbacks. Bij ndo_stop() dmaengine_terminate_sync()
annuleert deze beschrijvingen zonder hun callbacks uit te voeren, en de driver
vervolgens worden alleen de ringbehuizingen vrijgegeven, waardoor alle SKB's die nog in bezit zijn van de
De engine en de bijbehorende DMA-mapping bij elke ifdown. Met 128 vooraf geposteerde RX-buffers.
Per kanaal kan het lek in de mapping uiteindelijk een beperkte IOMMU uitputten.
opening. Wis de skb van de sleuf in de TX- en RX-callbacks, zodat een niet-NULL skb een sleuf markeert.
slot dat nog steeds een actieve, DMA-toegewezen buffer bezit, en bij het stoppen de toewijzing ongedaan maken en vrijgeven
elke dergelijke buffer. axienet_dma_rx_cb() wordt uitgevoerd vanuit de DMA-tasklet en activeert de RX-ring opnieuw.
elke voltooiing, zodat het kan wedijveren met axienet_stop(): een voltooiing kan een
een nieuwe buffer nadat dmaengine_terminate_sync() is teruggekeerd, waardoor de
kanaal uitgerust met een buffer de demontage vervolgens vrij terwijl de motor mogelijk
Ik blijf erin schrijven (dma_release_channel() stopt het ook niet). Voeg een toe
vergrendeling die axienet_dma_rx_cb() vasthoudt tijdens de @stopping-controle en de
Bij het opnieuw indienen, zorgt axienet_stop() ervoor dat @stopping wordt ingesteld voordat het programma wordt beëindigd. Zodra @stopping is ingesteld, kan geen enkele callback een nieuwe buffer activeren, en elke geactiveerde buffer kan gewoon worden verwijderd.
Het proces wordt afgebroken door de beëindiging, dus de opruimactie maakt alleen de buffers vrij.
De motor is niet langer in ons bezit.

Origineel (Engels) tonen

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

net: xilinx: axienet: Free outstanding DMA buffers on dmaengine stop

In the dmaengine path the driver pre-submits RX buffers and holds
in-flight TX buffers whose SKBs are DMA-mapped by the driver and freed
only in the completion callbacks. On ndo_stop() dmaengine_terminate_sync()
aborts these descriptors without running their callbacks, and the driver
then frees only the ring shells, leaking every SKB still owned by the
engine and its DMA mapping on each ifdown. With 128 RX buffers pre-posted
per channel, the mapping leak can eventually exhaust a limited IOMMU
aperture.

Clear the slot's skb in the TX and RX callbacks so a non-NULL skb marks a
slot that still owns a live, DMA-mapped buffer, and on stop unmap and free
every such buffer.

axienet_dma_rx_cb() runs from the DMA tasklet and re-arms the RX ring on
each completion, so it can race axienet_stop(): a completion may submit a
fresh buffer after dmaengine_terminate_sync() has returned, leaving the
channel armed with a buffer the teardown then frees while the engine may
still write into it (dma_release_channel() does not stop it either). Add a
lock that axienet_dma_rx_cb() holds across the @stopping check and the
resubmit, and axienet_stop() holds to set @stopping before terminating.
Once @stopping is set no callback can arm a new buffer, and any armed just
before is aborted by the terminate, so teardown only frees buffers the
engine no longer owns.

References