Bug 2300484 (CVE-2024-41088)

Summary: CVE-2024-41088 kernel: can: mcp251xfd: fix infinite loop when xmit fails
Product: [Other] Security Response Reporter: OSIDB Bzimport <bzimport>
Component: vulnerabilityAssignee: Product Security DevOps Team <prodsec-dev>
Status: NEW --- QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: unspecifiedCC: dfreiber, drow, jburrell, vkumar
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: kernel 6.1.97, kernel 6.6.37, kernel 6.9.8, kernel 6.10 Doc Type: If docs needed, set a value
Doc Text:
An infinite loop flaw was found in the MCP251xfd CAN driver in Linux Kernel that occurs when `mcp251xfd_start_xmit()` fails. Failure to transmit a message can lead to the driver halting message processing and getting stuck in an endless loop, particularly when multiple devices shared the same SPI interface.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2301677    
Bug Blocks:    

Description OSIDB Bzimport 2024-07-29 16:21:37 UTC
In the Linux kernel, the following vulnerability has been resolved:

can: mcp251xfd: fix infinite loop when xmit fails

When the mcp251xfd_start_xmit() function fails, the driver stops
processing messages, and the interrupt routine does not return,
running indefinitely even after killing the running application.

Error messages:
[  441.298819] mcp251xfd spi2.0 can0: ERROR in mcp251xfd_start_xmit: -16
[  441.306498] mcp251xfd spi2.0 can0: Transmit Event FIFO buffer not empty. (seq=0x000017c7, tef_tail=0x000017cf, tef_head=0x000017d0, tx_head=0x000017d3).
... and repeat forever.

The issue can be triggered when multiple devices share the same SPI
interface. And there is concurrent access to the bus.

The problem occurs because tx_ring->head increments even if
mcp251xfd_start_xmit() fails. Consequently, the driver skips one TX
package while still expecting a response in
mcp251xfd_handle_tefif_one().

Resolve the issue by starting a workqueue to write the tx obj
synchronously if err = -EBUSY. In case of another error, decrement
tx_ring->head, remove skb from the echo stack, and drop the message.

[mkl: use more imperative wording in patch description]

Comment 1 Mauro Matteo Cascella 2024-07-30 15:25:00 UTC
Upstream advisory:
https://lore.kernel.org/linux-cve-announce/2024072952-CVE-2024-41088-281e@gregkh/T

Comment 2 Mauro Matteo Cascella 2024-07-30 15:25:22 UTC
Created kernel tracking bugs for this issue:

Affects: fedora-all [bug 2301677]