Linux: eth: fbnic: ring the doorbell if a burst ends in a drop
What fixes it
- 60ef74357a36ed2a102a75bb68d37aa7f305b94eLinuxCVE List
- 28fb764d670aa22dcbd2a02fd8fd87ae8d3563a9LinuxCVE List
- 490599ab23134962a6d18a024e84541d77bdb999LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
eth: fbnic: ring the doorbell if a burst ends in a drop
fbnic_tx_map() skips the doorbell write, and the completion request, for every packet handed to it with xmit_more set, counting on the packet which ends the burst to publish them all. When that packet is dropped instead - skb_put_padto(), skb_cow_head() or a DMA mapping failure - nothing rings. The descriptors of the preceding packets stay invisible to the HW until the next transmit on that queue, which for a burst-then-idle workload may never come.
Remember the meta descriptor of the last packet left without a doorbell and flush it from the error paths. The completion request has to be set on that descriptor rather than simply writing the tail, otherwise the HW would transmit the packets but never report a head, and the ring would fill up and stall for good.
This is very similar to Joe's recent series of fixes for bnxt. Not seen in real life, reproduced under QEMU with failure injection.
Text from CVE List
Affected versions 8
- Linuxaffected: 9a57bacd574b52b08bc2c600af6a8c7a87049ecf before 60ef74357a36ed2a102a75bb68d37aa7f305b94eCVE List
- Linuxaffected: 9a57bacd574b52b08bc2c600af6a8c7a87049ecf before 28fb764d670aa22dcbd2a02fd8fd87ae8d3563a9CVE List
- Linuxaffected: 9a57bacd574b52b08bc2c600af6a8c7a87049ecf before 490599ab23134962a6d18a024e84541d77bdb999CVE List
- Linuxaffected: 6.11CVE List
- Linuxunaffected: all versions before 6.11CVE List
- Linuxunaffected: 6.18.54 through 6.18.*CVE List
- Linuxunaffected: 7.2.8 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List