CVE-2025-21799
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
27/02/2025
Last modified:
13/03/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net: ethernet: ti: am65-cpsw: fix freeing IRQ in am65_cpsw_nuss_remove_tx_chns()<br />
<br />
When getting the IRQ we use k3_udma_glue_tx_get_irq() which returns<br />
negative error value on error. So not NULL check is not sufficient<br />
to deteremine if IRQ is valid. Check that IRQ is greater then zero<br />
to ensure it is valid.<br />
<br />
There is no issue at probe time but at runtime user can invoke<br />
.set_channels which results in the following call chain.<br />
am65_cpsw_set_channels()<br />
am65_cpsw_nuss_update_tx_rx_chns()<br />
am65_cpsw_nuss_remove_tx_chns()<br />
am65_cpsw_nuss_init_tx_chns()<br />
<br />
At this point if am65_cpsw_nuss_init_tx_chns() fails due to<br />
k3_udma_glue_tx_get_irq() then tx_chn->irq will be set to a<br />
negative value.<br />
<br />
Then, at subsequent .set_channels with higher channel count we<br />
will attempt to free an invalid IRQ in am65_cpsw_nuss_remove_tx_chns()<br />
leading to a kernel warning.<br />
<br />
The issue is present in the original commit that introduced this driver,<br />
although there, am65_cpsw_nuss_update_tx_rx_chns() existed as<br />
am65_cpsw_nuss_update_tx_chns().
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/321990fdf4f1bb64e818c7140688bf33d129e48d
- https://git.kernel.org/stable/c/4395a44acb15850e492dd1de9ec4b6479d96bc80
- https://git.kernel.org/stable/c/8448c87b3af68bebca21e3136913f7f77e363515
- https://git.kernel.org/stable/c/88fd5db8c0073bd91d18391feb5741aeb0a2b475
- https://git.kernel.org/stable/c/8aae91ae1c65782a169ec070e023d4d269e5d6e6
- https://git.kernel.org/stable/c/aea5cca681d268f794fa2385f9ec26a5cce025cd
- https://git.kernel.org/stable/c/ed8c0300f302338c36edb06bca99051e5be6fb2f