In the Linux kernel, the following vulnerability has been resolved:
PCI: Fix link speed calculation on retrain failure
When pciefailedlink_retrain() fails to retrain, it tries to revert to the previous link speed. However it calculates that speed from the Link Control 2 register without masking out non-speed bits first.
PCIELNKCTL2TLS2SPEED() converts such incorrect values to PCISPEEDUNKNOWN (0xff), which in turn causes a WARN splat in pciesettarget_speed():
pci 0000:00:01.1: [1022:14ed] type 01 class 0x060400 PCIe Root Port pci 0000:00:01.1: broken device, retraining non-functional downstream link at 2.5GT/s pci 0000:00:01.1: retraining failed WARNING: CPU: 1 PID: 1 at drivers/pci/pcie/bwctrl.c:168 pciesettargetspeed RDX: 0000000000000001 RSI: 00000000000000ff RDI: ffff9acd82efa000 pciefailedlinkretrain pcideviceadd pciscansingle_device
Mask out the non-speed bits in PCIELNKCTL2TLS2SPEED() and PCIELNKCAPSLS2SPEED() so they don't incorrectly return PCISPEEDUNKNOWN.
[bhelgaas: commit log, add details from https://lore.kernel.org/r/1c92ef6bcb314ee6977839b46b393282e4f52e74.1750684771.git.lukas@wunner.de]
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/39xxx/CVE-2025-39784.json"
}