В ядре Linux устранена следующая уязвимость:
iio: adc: ad_sigma_delta: исправление удержания CS и утечек состояния
В ad_sigma_delta_single_conversion() set_mode(AD_SD_MODE_IDLE) и
Disable_one() были вызваны из блока out:, в то время как Keep_cs_asserted
все еще было правдой. Это вызывало любую передачу SPI, выполняемую этими обратными вызовами.
перенести cs_change=1, оставляя CS постоянно установленным после
конверсия. Исправьте это, переместив оба вызова в блок out_unlock: после
Keep_cs_asserted очищается, что соответствует шаблону, уже использованному в
ad_sd_calirate().
В пути ошибки ad_sd_buffer_postenable(), если операция завершилась неудачно.
после того, как set_mode(AD_SD_MODE_CONTINUOUS) уже завершился успешно (например.
spi_offload_trigger_enable()), устройство остается в непрерывном режиме.
режим преобразования с физически заявленным CS. Кроме того,
bus_locked остается истинным после того, как spi_bus_unlock() вызывает последующие
Операции SPI для вызова spi_sync_locked() фактически без блокировки шины
удерживается, обеспечивая одновременный доступ к SPI. Исправьте путь ошибки, сначала очистив Keep_cs_asserted, а затем вызвав
set_mode(AD_SD_MODE_IDLE) для возврата режима устройства и отмены подтверждения CS,
затем очистка bus_locked перед освобождением шины.
Для устройств, которые не реализуют ни set_mode, ни Disable_one (например,
MAX11205, у которого нет физического контакта CS), передача SPI не осуществляется.
во время очистки и флаг cs_change не влияет ни на какие физические
линия.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: iio: adc: ad_sigma_delta: fix CS held asserted and state leaks In ad_sigma_delta_single_conversion(), set_mode(AD_SD_MODE_IDLE) and disable_one() were called from the out: block while keep_cs_asserted was still true. This caused any SPI transfer issued by those callbacks to carry cs_change=1, leaving CS permanently asserted after the conversion. Fix by moving both calls into the out_unlock: block, after keep_cs_asserted is cleared, matching the pattern already used in ad_sd_calibrate(). In the error path of ad_sd_buffer_postenable(), if an operation fails after set_mode(AD_SD_MODE_CONTINUOUS) has already succeeded (e.g. spi_offload_trigger_enable()), the device is left in continuous conversion mode with CS physically asserted. Additionally, bus_locked remaining true after spi_bus_unlock() causes subsequent SPI operations to call spi_sync_locked() without the bus lock actually held, allowing concurrent SPI access. Fix the error path by clearing keep_cs_asserted first, then calling set_mode(AD_SD_MODE_IDLE) to revert the device mode and deassert CS, then clearing bus_locked before releasing the bus. For devices that implement neither set_mode nor disable_one (such as MAX11205, which has no physical CS pin), no SPI transfer is issued during cleanup and the cs_change flag has no effect on any physical line.
Характеристики атаки
Последствия
Строка CVSS v3.1