CVE-2024-42302

In the Linux kernel, the following vulnerability has been resolved: PCI/DPC: Fix use-after-free on concurrent DPC and hot-removal Keith reports a use-after-free when a DPC event occurs concurrently to hot-removal of the same portion of the hierarchy: The dpc_handler() awaits readiness of the secondary bus below the Downstream Port where the DPC event occurred. To do so, it polls the config space of the first child device on the secondary bus. If that child device is concurrently removed, accesses to its struct pci_dev cause the kernel to oops. That's because pci_bridge_wait_for_secondary_bus() neglects to hold a reference on the child device. Before v6.3, the function was only called on resume from system sleep or on runtime resume. Holding a reference wasn't necessary back then because the pciehp IRQ thread could never run concurrently. (On resume from system sleep, IRQs are not enabled until after the resume_noirq phase. And runtime resume is always awaited before a PCI device is removed.) However starting with v6.3, pci_bridge_wait_for_secondary_bus() is also called on a DPC event. Commit 53b54ad074de ("PCI/DPC: Await readiness of secondary bus after reset"), which introduced that, failed to appreciate that pci_bridge_wait_for_secondary_bus() now needs to hold a reference on the child device because dpc_handler() and pciehp may indeed run concurrently. The commit was backported to v5.10+ stable kernels, so that's the oldest one affected. Add the missing reference acquisition. Abridged stack trace: BUG: unable to handle page fault for address: 00000000091400c0 CPU: 15 PID: 2464 Comm: irq/53-pcie-dpc 6.9.0 RIP: pci_bus_read_config_dword+0x17/0x50 pci_dev_wait() pci_bridge_wait_for_secondary_bus() dpc_reset_link() pcie_do_recovery() dpc_handler()
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

History

22 Aug 2024, 16:37

Type Values Removed Values Added
References () https://git.kernel.org/stable/c/11a1f4bc47362700fcbde717292158873fb847ed - () https://git.kernel.org/stable/c/11a1f4bc47362700fcbde717292158873fb847ed - Patch
References () https://git.kernel.org/stable/c/2c111413f38ca5cf87557cab89f6d82b0e3433e7 - () https://git.kernel.org/stable/c/2c111413f38ca5cf87557cab89f6d82b0e3433e7 - Patch
References () https://git.kernel.org/stable/c/2cc8973bdc4d6c928ebe38b88090a2cdfe81f42f - () https://git.kernel.org/stable/c/2cc8973bdc4d6c928ebe38b88090a2cdfe81f42f - Patch
References () https://git.kernel.org/stable/c/b16f3ea1db47a6766a9f1169244cf1fc287a7c62 - () https://git.kernel.org/stable/c/b16f3ea1db47a6766a9f1169244cf1fc287a7c62 - Patch
References () https://git.kernel.org/stable/c/c52f9e1a9eb40f13993142c331a6cfd334d4b91d - () https://git.kernel.org/stable/c/c52f9e1a9eb40f13993142c331a6cfd334d4b91d - Patch
References () https://git.kernel.org/stable/c/f63df70b439bb8331358a306541893bf415bf1da - () https://git.kernel.org/stable/c/f63df70b439bb8331358a306541893bf415bf1da - Patch
CPE cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
First Time Linux
Linux linux Kernel
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 7.8
CWE CWE-416

19 Aug 2024, 12:59

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: PCI/DPC: corrige el use-after-free en DPC simultáneos y la eliminación en caliente. Keith informa un use-after-free cuando ocurre un evento de DPC simultáneamente con la eliminación en caliente del mismo. parte de la jerarquía: dpc_handler() espera que el bus secundario esté listo debajo del puerto descendente donde ocurrió el evento DPC. Para hacerlo, sondea el espacio de configuración del primer dispositivo secundario en el bus secundario. Si ese dispositivo secundario se elimina simultáneamente, los accesos a su estructura pci_dev hacen que el kernel falle. Esto se debe a que pci_bridge_wait_for_secondary_bus() no mantiene una referencia en el dispositivo secundario. Antes de v6.3, la función solo se llamaba al reanudar desde la suspensión del sistema o al reanudar el tiempo de ejecución. Mantener una referencia no era necesario en aquel entonces porque el subproceso pciehp IRQ nunca podía ejecutarse al mismo tiempo. (Al reanudar desde la suspensión del sistema, las IRQ no se habilitan hasta después de la fase resume_noirq. Y la reanudación del tiempo de ejecución siempre se espera antes de que se elimine un dispositivo PCI). Sin embargo, a partir de v6.3, pci_bridge_wait_for_secondary_bus() también se llama en un evento DPC. El commit 53b54ad074de ("PCI/DPC: Esperar la preparación del bus secundario después del reinicio"), que introdujo eso, no pudo apreciar que pci_bridge_wait_for_secundary_bus() ahora necesita mantener una referencia en el dispositivo secundario porque dpc_handler() y pciehp pueden ejecutarse simultáneamente. El commit fue respaldada a núcleos estables v5.10+, por lo que ese es el más antiguo afectado. Agregue la adquisición de referencia que falta. Seguimiento de pila abreviado: ERROR: no se puede manejar el error de página para la dirección: 00000000091400c0 CPU: 15 PID: 2464 Comm: irq/53-pcie-dpc 6.9.0 RIP: pci_bus_read_config_dword+0x17/0x50 pci_dev_wait() pci_bridge_wait_for_secondary_bus() dpc_reset_link() _hacer_recuperación () dpc_handler()

19 Aug 2024, 05:15

Type Values Removed Values Added
References
  • () https://git.kernel.org/stable/c/2c111413f38ca5cf87557cab89f6d82b0e3433e7 -
  • () https://git.kernel.org/stable/c/c52f9e1a9eb40f13993142c331a6cfd334d4b91d -

17 Aug 2024, 09:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-08-17 09:15

Updated : 2024-08-22 16:37


NVD link : CVE-2024-42302

Mitre link : CVE-2024-42302

CVE.ORG link : CVE-2024-42302


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-416

Use After Free