CVE-2023-52771 in Linux
Riassunto
di VulDB • 28/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
cxl/port: Correzione della race condition tra delete_endpoint() e deregistrazione del genitore
Il sottosistema CXL, al momento di cxl_mem ->probe(), stabilisce una linea gerarchica (lineage) di porte (oggetti struct cxl_port) tra un endpoint e la radice di una topologia CXL. Ogni porta, inclusa l'endpoint port, è associata al driver cxl_port.
Dato questo scenario, ne consegue che quando qualsiasi porta in tale lineage subisce un evento cxl_port ->remove(), oppure il memdev subisce un evento cxl_mem ->remove(), la gerarchia sottostante alla porta rimossa o l'intera gerarchia (se viene rimosso il memdev) deve essere smontata.
La callback delete_endpoint() verifica attentamente se sta venendo chiamata per smantellare la gerarchia, oppure se è stata invocata solo per lo smontaggio del memdev perché una porta antenata sta subendo ->remove().
Questa precauzione richiede di acquisire il device_lock() del genitore dell'endpoint. Ciò comporta la necessità di correggere 2 bug:
1/ È necessaria una reference sul genitore per prevenire scenari use-after-free come quello indicato dalla seguente firma:
BUG: spinlock bad magic on CPU#0, kworker/u56:0/11 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20230524-3.fc38 05/24/2023 Workqueue: cxl_port detach_memdev [cxl_core]
RIP: 0010:spin_bug+0x65/0xa0 Call Trace: do_raw_spin_lock+0x69/0xa0 __mutex_lock+0x695/0xb80 delete_endpoint+0xad/0x150 [cxl_core]
devres_release_all+0xb8/0x110 device_unbind_cleanup+0xe/0x70 device_release_driver_internal+0x1d2/0x210 detach_memdev+0x15/0x20 [cxl_core]
process_one_work+0x1e3/0x4c0 worker_thread+0x1dd/0x3d0
2/ Nel caso di topologie RCH, il dispositivo genitore che deve essere bloccato non è sempre @port->dev come restituito da cxl_mem_find_port(), ma va utilizzato endpoint->dev.parent.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.