CVE-2023-52617

PCI: switchtec: Fix stdev_release() crash after surprise hot remove

Medium · published March 18, 2024

CVSS v3.1
4.4
EPSS
0%
Percentile
13.9
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

PCI: switchtec: Fix stdev_release() crash after surprise hot remove

A PCI device hot removal may occur while stdev->cdev is held open. The call

to stdev_release() then happens during close or exit, at a point way past

switchtec_pci_remove(). Otherwise the last ref would vanish with the

trailing put_device(), just before return.

At that later point in time, the devm cleanup has already removed the

stdev->mmio_mrpc mapping. Also, the stdev->pdev reference was not a counted

one. Therefore, in DMA mode, the iowrite32() in stdev_release() will cause

a fatal page fault, and the subsequent dma_free_coherent(), if reached,

would pass a stale &stdev->pdev->dev pointer.

Fix by moving MRPC DMA shutdown into switchtec_pci_remove(), after

stdev_kill(). Counting the stdev->pdev ref is now optional, but may prevent

future accidents.

Reproducible via the script at

https://lore.kernel.org/r/[email protected]

The record
Technical detail
CVSS v3.1
4.4 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00237 · 13.9th percentile
Published
2024-03-18T10:19Z
EPSS history
Timeline
  • 18 MAR 10:19Z
    PCI: switchtec: Fix stdev_release() crash after surprise hot remove
    cvelistv5