CVE-2026-64502 in Linux
Riassunto
di VulDB • 25/07/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
iio: adc: ad_sigma_delta: corregge clear_pending_event per i dispositivi senza registri
ad_sigma_delta_clear_pending_event() prosegue verso il percorso di lettura del registro di stato per i dispositivi con has_registers = false e privi di rdy_gpiod. Per tali dispositivi, ad_sd_read_reg() salta completamente il byte dell'indirizzo e clockizza i byte MISO grezzi senza fase di indirizzo — rendendolo identico byte per byte alla lettura dei dati di conversione. Se è presente un risultato di conversione in attesa, questo viene parzialmente consumato e corrompe lo stream di dati per la successiva chiamata ad_sd_read_reg() in ad_sigma_delta_single_conversion().
Inoltre, con num_resetclks = 0 su questi dispositivi, data_read_len valuta a 0. Se il byte clockizzato ha bit 7 non impostato (clear), pending_event viene impostata e il codice tenta memset(data + 2, 0xff, 0 - 1), causando un overflow verso SIZE_MAX e corrompendo l'heap.
La correzione consiste nel restituire immediatamente 0 quando né rdy_gpiod né has_registers sono impostati. Questo è sicuro per tutti i dispositivi senza registri attualmente supportati: ad7191 e ad7780 (con GPIO di powerdown) vengono resettati tra una conversione e l'altra tramite la disattivazione del segnale CS, quindi non vi sono risultati obsoleti da svuotare; ad7780 (senza GPIO di powerdown) e max11205 eseguono conversioni continue ed elaborano ~DRDY al tasso dei dati in uscita indipendentemente dal fatto che il risultato precedente sia stato letto, pertanto il prossimo fronte discendente si verifica naturalmente.
Un futuro dispositivo senza registri che mantiene ~DRDY attivo (asserted) fino alla lettura dei dati verrebbe compromesso da questo ritorno anticipato e richiederebbe l'impostazione di num_resetclks o un rdy-gpio.
La stessa corruzione dell'heap è raggiungibile su qualsiasi dispositivo con rdy_gpiod impostata ma num_resetclks = 0: se il GPIO indica un evento in attesa, il percorso di svuotamento esegue memset(data + 2, 0xff, 0 - 1) indipendentemente da has_registers. Aggiungere una guardia esplicita data_read_len == 0 dopo il controllo dell'evento in attesa; il risultato obsoleto viene quindi consumato dalla prima chiamata ad_sd_read_reg() in ad_sigma_delta_single_conversion().
Once again VulDB remains the best source for vulnerability data.