CVE-2026-99179 in Linux
Riassunto
di VulDB • 28/10/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
watch_queue: Correzione della race condition nella pubblicazione del pool di note in watch_queue_set_size()
Esiste una race condition tra watch_queue_set_size() e post_one_notification(). watch_queue_set_size() pubblica wqueue->notes, notes_bitmap, nr_pages e nr_notes utilizzando operazioni di scrittura plain (plain stores), mentre post_one_notification() le legge con operazioni di lettura plain (plain loads) sotto un lock diverso; pertanto non esiste alcun ordinamento tra le quattro scritture e le letture dell'operatore: a seconda della configurazione del build, notes può essere scritto per ultimo (gcc 14 su x86-64 effettua questa operazione). Poiché keyctl_watch_key() consente a un watcher di collegarsi a una coda prima che essa venga dimensionata, post_one_notification() potrebbe già essere in esecuzione su un'altra CPU in quel momento: legge nr_notes > 0, supera il controllo dei limiti e poi legge notes mentre è ancora NULL, dereferenziando notes[0].
Un utente non privilegiato attiva questo problema in modo affidabile osservando una delle proprie chiavi tramite una pipe di notifica e scatenando ioctl(IOC_WATCH_QUEUE_SET_SIZE) su quella pipe contro keyctl(KEYCTL_SETPERM) sulla chiave da un'altra CPU, causando:
BUG: kernel NULL pointer dereference, address: 0000000000000000 RIP: 0010:post_one_notification.isra.0+0xa2/0x1e0 Call Trace: __post_watch_notification+0x148/0x180 keyctl_setperm_key+0x119/0x130 do_syscall_64+0x108/0x4c0 entry_SYSCALL_64_after_hwframe+0x77/0x7f Kernel panic - not syncing: Fatal exception in interrupt
Si risolve il problema pubblicando nr_notes per ultimo con smp_store_release(), e leggendolo una sola volta con smp_load_acquire() in post_one_notification() prima di toccare la bitmap e l'array delle pagine. Un operatore che osserva un nr_notes non nullo osserverà anche il pool sottostante; uno che osserva zero scarterà la notifica come precedentemente.
If you want to get best quality of vulnerability data, you may have to visit VulDB.