CVE-2024-53214 in Linux
Riassunto
di VulDB • 14/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
vfio/pci: Nascondere correttamente la prima capacità estesa PCIe in elenco
Esistono casi in cui una capacità estesa PCIe dovrebbe essere nascosta all'utente. Ad esempio, una capacità sconosciuta (ovvero una capacità con ID maggiore di PCI_EXT_CAP_ID_MAX) o una capacità che è intenzionalmente scelta per essere nascosta all'utente.
Nascondere una capacità avviene virtualizzando e modificando il campo 'Next Capability Offset' (Offset della capacità successiva) della capacità precedente in modo che punti alla capacità successiva a quella che deve essere nascosta.
Il caso speciale in cui la prima capacità nell'elenco deve essere nascosta viene gestito in modo diverso poiché non esiste una capacità precedente che possa essere modificata. In questo caso, l'ID della capacità e la versione vengono azzerati lasciando intatto il puntatore alla capacità successiva. Questo nasconde la capacità e lascia un ancoraggio per il resto dell'elenco delle capacità.
Tuttavia, attualmente, nascondere la prima capacità nell'elenco non viene fatto correttamente se la capacità è sconosciuta, poiché struct vfio_pci_core_device->pci_config_map è impostato sull'ID della capacità durante l'inizializzazione, ma l'ID della capacità non viene controllato correttamente in seguito quando viene utilizzato in vfio_config_do_rw(). Ciò porta al seguente avviso [1] e a un accesso fuori dai limiti dell'array ecap_perms.
Risolvere il problema verificando cap_id in vfio_config_do_rw() e, se è maggiore di PCI_EXT_CAP_ID_MAX, utilizzare una struct perm_bits alternativa per l'accesso in sola lettura diretta invece dell'array ecap_perms.
Si noti che questo è sicuro poiché quanto sopra è l'unico caso in cui cap_id può superare PCI_EXT_CAP_ID_MAX (eccetto per le capacità speciali, che sono già controllate in precedenza).
[1]
WARNING: CPU: 118 PID: 5329 at drivers/vfio/pci/vfio_pci_config.c:1900 vfio_pci_config_rw+0x395/0x430 [vfio_pci_core]
CPU: 118 UID: 0 PID: 5329 Comm: simx-qemu-syste Not tainted 6.12.0+ #1 (snip) Call Trace: ? show_regs+0x69/0x80 ? __warn+0x8d/0x140 ? vfio_pci_config_rw+0x395/0x430 [vfio_pci_core]
? report_bug+0x18f/0x1a0 ? handle_bug+0x63/0xa0 ? exc_invalid_op+0x19/0x70 ? asm_exc_invalid_op+0x1b/0x20 ? vfio_pci_config_rw+0x395/0x430 [vfio_pci_core]
? vfio_pci_config_rw+0x244/0x430 [vfio_pci_core]
vfio_pci_rw+0x101/0x1b0 [vfio_pci_core]
vfio_pci_core_read+0x1d/0x30 [vfio_pci_core]
vfio_device_fops_read+0x27/0x40 [vfio]
vfs_read+0xbd/0x340 ? vfio_device_fops_unl_ioctl+0xbb/0x740 [vfio]
? __rseq_handle_notify_resume+0xa4/0x4b0 __x64_sys_pread64+0x96/0xc0 x64_sys_call+0x1c3d/0x20d0 do_syscall_64+0x4d/0x120 entry_SYSCALL_64_after_hwframe+0x76/0x7e
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.