CVE-2026-63883
CVE.org · Published
- Record status
- Published
- Identifier year (not publication year)
- 2026
- Source publication
- Source updated
- Imported by cveboard
- Source snapshot
- cve_2026-10-24_midnight_baseline ·
CNA source text (English)
serial: qcom_geni: fix kfifo underflow when flush precedes DMA completion IRQ
In the Linux kernel, the following vulnerability has been resolved: serial: qcom_geni: fix kfifo underflow when flush precedes DMA completion IRQ When uart_flush_buffer() runs before the DMA completion IRQ is delivered, the following race can occur (all steps serialized by uart_port_lock): 1. DMA starts: tx_remaining = N, kfifo contains N bytes 2. DMA completes in hardware; IRQ is pending but not yet delivered 3. uart_flush_buffer() acquires the port lock and calls kfifo_reset(), making kfifo_len() = 0 while tx_remaining remains N 4. uart_flush_buffer() releases the port lock 5. DMA IRQ fires; handle_tx_dma() acquires the port lock and calls uart_xmit_advance(uport, tx_remaining) on an empty kfifo uart_xmit_advance() increments kfifo->out by tx_remaining. Since kfifo_reset() already set both in and out to 0, out wraps past in, causing kfifo_len() to return UART_XMIT_SIZE - tx_remaining. The next start_tx_dma() call then submits a DMA transfer of stale buffer data. Fix this by snapshotting kfifo_len() at the start of handle_tx_dma() and skipping uart_xmit_advance() when fifo_len < tx_remaining, which indicates the kfifo was reset by a preceding flush.
Scoped product and version facts
Fix information unknown; no fixed version is derived here. Missing information does not prove that no fix exists.
Exploitation unknown; this catalogue does not assess exploitation.
Linux
- Vendor
- Linux
- Product
- Linux
- Platforms
- Unknown
- Default status
unaffected
| Version (version) | Status (status) | Version scheme (versionType) | Exclusive end (lessThan) | Inclusive end (lessThanOrEqual) | Status changes (at → status) |
|---|---|---|---|---|---|
| 2aaa43c7077833301c237684cd7bc9ae5e3dec95 | affected | git | c91ea13375f70f6271a0183445e34e83b8f4d8f7 | Unavailable | None listed |
| 2aaa43c7077833301c237684cd7bc9ae5e3dec95 | affected | git | b1159dce10b38eb795e4c96cdc4d34b83cec81c5 | Unavailable | None listed |
| 2aaa43c7077833301c237684cd7bc9ae5e3dec95 | affected | git | 654f45a8569f3cd6ff20bd724a18e0cce65893ba | Unavailable | None listed |
| 2aaa43c7077833301c237684cd7bc9ae5e3dec95 | affected | git | 0d2c41a8b00934ddf8a7c1b4cf72dffa1e629c46 | Unavailable | None listed |
| 2aaa43c7077833301c237684cd7bc9ae5e3dec95 | affected | git | 452d6fa37ae9b021f4f6d397dbae077f7296f6f4 | Unavailable | None listed |
Linux
- Vendor
- Linux
- Product
- Linux
- Platforms
- Unknown
- Default status
affected
| Version (version) | Status (status) | Version scheme (versionType) | Exclusive end (lessThan) | Inclusive end (lessThanOrEqual) | Status changes (at → status) |
|---|---|---|---|---|---|
| 6.3 | affected | Unavailable | Unavailable | Unavailable | None listed |
| 0 | unaffected | semver | 6.3 | Unavailable | None listed |
| 6.6.143 | unaffected | semver | Unavailable | 6.6.* | None listed |
| 6.12.93 | unaffected | semver | Unavailable | 6.12.* | None listed |
| 6.18.35 | unaffected | semver | Unavailable | 6.18.* | None listed |
| 7.0.12 | unaffected | semver | Unavailable | 7.0.* | None listed |
| 7.1 | unaffected | original_commit_for_fix | Unavailable | * | None listed |