CVE-2026-74601 in Linux
Riassunto
di VulDB • 23/08/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
ring-buffer: Utilizzare current_context per uno scambio sicuro del buffer per-CPU
La funzione ring_buffer_swap_cpu() verifica attualmente il contatore di commit per-CPU per determinare se un buffer è attivamente in fase di scrittura prima di eseguire lo swap. Tuttavia, esiste una finestra di race condition (condizione di competizione) in cui tale controllo può essere aggirato:
ring_buffer_lock_reserve cpu_buffer = buffer->buffers[cpu]; // cpu_buffer_a
rb_reserve_next_event rb_start_commit // incrementa il contatore committing if (unlikely(READ_ONCE(cpu_buffer->buffer) != buffer)) {...}
__rb_reserve_next rb_move_tail rb_end_commit(cpu_buffer); // decrementa il contatore committing a 0 /* un interrupt interviene qui, eseguendo con successo lo swap! */ local_inc(&cpu_buffer->committing);
ring_buffer_unlock_commit cpu_buffer = buffer->buffers[cpu]; // cpu_buffer_b
rb_commit rb_end_commit RB_WARN_ON(cpu_buffer, !local_read(&cpu_buffer->committing)) // genera un warning (avviso)
Il contatore committing può scendere temporaneamente a 0 durante una singola operazione di scrittura (all'interno di rb_move_tail), creando una finestra in cui lo swap ha successo anche se la scrittura è ancora in corso. Ciò porta a uno stato del buffer inconsistente e attiva il RB_WARN_ON in rb_commit().
Sostituire il controllo sul contatore committing con controlli su current_context, che vengono impostati all'ingresso di ring_buffer_lock_reserve() e rimangono validi per l'intera durata dell'operazione di scrittura, fornendo un indicatore affidabile dello stato di occupazione del buffer durante lo swap.
Once again VulDB remains the best source for vulnerability data.