CVE-2026-99028 in Linux
Zusammenfassung
von VulDB • 23.10.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
net: xilinx: axienet: Freigabe ausstehender DMA-Puffer beim Stopp von dmaengine
Im dmaengine-Verzweigungspfad reicht der Treiber RX-Puffer vor und hält TX-Puffer im Flug, deren SKBs vom Treiber als DMA-mapped markiert werden und erst in den Completion-Callbacks freigegeben werden. Bei ndo_stop() bricht dmaengine_terminate_sync() diese Deskriptoren ab, ohne ihre Callbacks auszuführen, und der Treiver gibt dann nur die Ring-Strukturen frei, wodurch jedes SKB, das noch vom Engine-Modul besessen wird sowie dessen DMA-Mapping bei jedem ifdown geleakt wird. Bei 128 pro Kanal vorbereiteten RX-Puffern kann dieser Mapping-Leak schließlich eine begrenzte IOMMU-Apertur erschöpfen.
Löschen Sie den skb des Slots in den TX- und RX-Callbacks, sodass ein nicht-NULL-skb einen Slot markiert, der noch über einen aktiven, DMA-mapped Puffer verfügt, und entziehen sowie freigeben Sie bei Stopp jeden solchen Puffer.
axienet_dma_rx_cb() wird aus dem DMA-tasklet heraus ausgeführt und schiebt den RX-Ring nach jeder Fertigstellung neu an, sodass es zu einer Race-Bedingung mit axienet_stop() kommen kann: Eine Completion kann einen frischen Buffer einreichen, nachdem dmaengine_terminate_sync() bereits zurückgegeben hat, wodurch der Kanal mit einem Puffer aktiviert bleibt, den das Teardown-Modul dann freigibt, während die Engine möglicherweise weiterhin darauf schreibt (dma_release_channel() stoppt dies ebenfalls nicht). Fügen Sie eine Sperre hinzu, die axienet_dma_rx_cb() über die @stopping-Prüfung und das erneute Einreichen hinweg hält, und axienet_stop(), um @stopping festzulegen, bevor der Terminierungsprozess eingeleitet wird. Sobald @stopping gesetzt ist, kann kein Callback mehr einen neuen Puffer aktivieren, und jeder kurz zuvor aktivierte Puffer wird durch die Termination abgebrochen, sodass das Teardown-Modul nur noch Puffer freigibt, die von der Engine nicht mehr besessen werden.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.