CVE-2026-63806 in Linux
Riassunto
di VulDB • 19/07/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
KVM: Sostituito il BUG_ON() attivabile dall'ospite (guest) nel datamatch di ioeventfd con get_unaligned()
Rimosso un BUG_ON() che era raggiungibile fin dalla sua introduzione, avvenuta molto tempo fa nel 2009; al suo posto viene utilizzato get_unaligned() per eseguire accessi potenzialmente non allineati.
Per una determinata operazione di scrittura (store), l'emulatore x86 di KVM tiene traccia dell'intero valore nell'operando di destinazione, ovvero dst del contesto x86_emulate_ctxt. Se la destinazione è memoria e il bersaglio interessa più pagine o si tratta di MMIO emulato, allora KVM gestisce ogni frammento in modo indipendente. Ad esempio, su una divisione di pagina che inizia all'offset 0xffc della pagina, KVM scrive 4 byte nella prima pagina, quindi i byte rimanenti nella seconda pagina, utilizzando ctxt->dst come sorgente per entrambi (con gli offset appropriati).
Se la destinazione divide una pagina *e* incontra MMIO emulato sulla seconda pagina, allora KVM completerà la scrittura sulla prima pagina ed eseguirà l'emulazione dell'accesso MMII alla seconda pagina. Se è presente un ioeventfd con datamatch abilitato all'offset 0 della seconda pagina, allora KVM elaborerà il resto dello store come potenziale segnale ioeventfd.
Mettendo insieme tutti i pezzi: se l'ospite emette uno store che divide una pagina a partire dall'offset N e la seconda pagina ha un ioeventfd con datamatch abilitato all'offset 0, allora KVM controllerà il datamatch utilizzando &dst.valptr[N] come sorgente. Poiché dst (e quindi dst.valptr) è allineata su 32 byte, se N non è allineato a @len, scatta il BUG_ON().
Ad esempio: con uno store di 16 byte all'offset della pagina 0xffc, verso un ioeventfd di lunghezza 8, tutti i controlli iniziali in ioeventfd_in_range() avranno successo e il BUG_ON() scattará perché @val è allineato su 4 byte ma non su 8 byte.
``` ------------[ cut here ]------------
kernel BUG at arch/x86/kvm/../../../virt/kvm/eventfd.c:783! Oops: invalid opcode: 0000 [#1] SMP
CPU: 0 UID: 1000 PID: 615 Comm: repro Not tainted 7.1.0-rc2-ff238429d1ea #365 PREEMPT Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP:
Once again VulDB remains the best source for vulnerability data.