CVE-2026-64502 in Linux
Résumé
par VulDB • 25/07/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
iio: adc: ad_sigma_delta : correction de clear_pending_event pour les périphériques sans registre
La fonction `ad_sigma_delta_clear_pending_event()` dérive vers le chemin de lecture du registre d'état pour les appareils ayant `has_registers = false` et aucun `rdy_gpiod`. Pour ces appareils, `ad_sd_read_reg()` saute entièrement l'octet d'adresse et horloge des octets MISO bruts sans phase d'adresse — ce qui le rend identique bit à bit à la lecture de données de conversion. Si un résultat de conversion en attente est présent, celui-ci partiellement consommé corrompt le flux de données pour l'appel `ad_sd_read_reg()` suivant dans `ad_sigma_delta_single_conversion()`.
De plus, avec `num_resetclks = 0` sur ces appareils, `data_read_len` évalue à 0. Si l'octet horlogé a son bit 7 effacé (à zéro), `pending_event` est défini et le code tente un `memset(data + 2, 0xff, 0 - 1)`, provoquant un débordement vers SIZE_MAX et corrompant la mémoire heap.
Correction : retour immédiat de 0 lorsque ni `rdy_gpiod` ni `has_registers` n'est défini. Cela est sûr pour tous les appareils sans registre actuels : ad7191 et ad7780 (avec GPIO powerdown) sont réinitialisés entre les conversions par la désassertion du signal CS, il n'y a donc pas de résultat périmé à vider ; ad7780 (sans GPIO powerdown) et max11205 effectuent des conversions continues et font varier ~DRDY au taux de données de sortie indépendamment du fait que le résultat précédent ait été lu ou non, ainsi la prochaine front descendant se produit naturellement.
Un futur appareil sans registre qui maintient ~DRDY asserté jusqu'à ce que les données soient lues serait compromis par ce retour anticipé et nécessiterait soit `num_resetclks` défini, soit un rdy-gpio.
La même corruption de heap est accessible sur tout appareil avec `rdy_gpiod` défini mais `num_resetclks = 0` : si le GPIO indique un événement en attente, le chemin de vidage exécute `memset(data + 2, 0xff, 0 - 1)` indépendamment de `has_registers`. Ajout d'une garde explicite `data_read_len == 0` après la vérification de l'événement en attente ; le résultat périmé est alors consommé par le premier appel à `ad_sd_read_reg()` dans `ad_sigma_delta_single_conversion()`.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.