CVE-2026-64502 in Linux
Сводка
по VulDB • 25.07.2026
В ядре Linux устранена следующая уязвимость:
iio: adc: ad_sigma_delta: исправлена функция clear_pending_event для устройств без регистров
Функция `ad_sigma_delta_clear_pending_event()` переходит к ветке чтения регистра статуса для устройств с параметром `has_registers = false` и отсутствием `rdy_gpiod`. Для таких устройств вызов `ad_sd_read_reg()` полностью пропускает байт адреса и тактирует сырые байты MISO без фазы адреса — что делает его побайтно идентичным чтению данных преобразования. Если присутствует результат ожидающего (pending) преобразования, он частично потребляется, что приводит к повреждению потока данных для последующего вызова `ad_sd_read_reg()` в функции `ad_sigma_delta_single_conversion()`.
Кроме того, при значении `num_resetclks = 0` на этих устройствах переменная `data_read_len` вычисляется как 0. Если тактируемый байт имеет сброшенный бит 7 (bit 7 clear), устанавливается флаг `pending_event`, и код пытается выполнить вызов `memset(data + 2, 0xff, 0 - 1)`. Это приводит к переполнению со значением SIZE_MAX и повреждению памяти в куче (heap corruption).
Исправление заключается в немедленном возврате значения 0, если не установлены ни `rdy_gpiod`, ни `has_registers`. Это безопасно для всех текущих устройств без регистров: ad7191 и ad7780 (с GPIO питания/отключения) сбрасываются между преобразованиями путем снятия сигнала CS (deassertion), поэтому нет устаревшего результата, который нужно было бы очистить; ad7780 (без GPIO питания/отключения) и max11205 работают в режиме непрерывного преобразования и циклически генерируют сигнал ~DRDY с частотой выходных данных независимо от того, был ли прочитан предыдущий результат, поэтому следующее спадающее фронт возникает естественно.
Будущее устройство без регистров, которое удерживает сигнал ~DRZY asserted до тех пор, пока данные не будут прочитаны, будет нарушено этим ранним возвратом и потребует либо установки `num_resetclks`, либо наличия rdy-gpio.
То же повреждение кучи (heap corruption) достижимо на любом устройстве с установленным флагом `rdy_gpiod` при значении `num_resetclks = 0`: если GPIO указывает на ожидающее событие, путь очистки выполняет вызов `memset(data + 2, 0xff, 0 - 1)` независимо от значения `has_registers`. Добавлена явная проверка-защита (guard) условия `data_read_len == 0` после проверки события pending; устаревший результат затем потребляется первым вызовом `ad_sd_read_reg()` в функции `ad_sigma_delta_single_conversion()`.
If you want to get best quality of vulnerability data, you may have to visit VulDB.