🇰🇷 한글 설명
Linux 커널의 iio: adc: ad_sigma_delta 드라이버에서 CS(Chip Select) 신호가 계속 활성화된 상태로 유지되거나 상태가 누수되는 취약점이 발견되었습니다. 오류 발생 시 장치가 연속 변환 모드에 머물거나 버스 잠금 상태가 비정상적으로 유지되어 이후 SPI 통신에 영향을 줄 수 있습니다.
💡 쉬운 설명
하드웨어 제어 소프트웨어의 오류로 인해 통신 신호가 꺼지지 않고 계속 켜져 있는 상태가 될 수 있습니다. 이로 인해 다른 장치와의 통신이 방해받거나 시스템이 오작동할 위험이 있습니다.
🇺🇸 원문 (English)
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.
📍 영향받는 시스템
Linux kernel (iio: adc: ad_sigma_delta 드라이버 사용 시스템)
⚔️ 공격 벡터
특정 오류 경로를 유도하여 하드웨어 제어 상태를 비정상적으로 유지시키는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.