CVE-2026-10683 in Zephyr
요약
\~에 의해 VulDB • 2026. 07. 27.
Synopsys DesignWare I2C 드라이버(drivers/i2c/i2c_dw.c)가 타겟/슬레이브 모드에서 동작할 때, rx_full 인터럽트 핸들러는 dw->state != CMD_SEND 조건 하에 write_requested() 콜백을 차단합니다. 또한 dw->state는 STOP 인터럽트 발생 시에만 READY 상태로 재설정됩니다. i2c_dw_slave_read_clear_intr_bits() 내의 START_DET 인터럽트 핸들러가 모든 (재)START마다 상태를 재설정해야 하지만, 이 핸들러는 i2c_dw_slave_register()에서 활성화된 인터럽트 마스크에 추가되지 않았으므로 해당 복구 경로는 사용하지 않는 코드(dead code)였습니다.
그 결과 STOP 인터럽트가 손실되는 경우(버스 글리치/리셋 또는 동시 실행 중인 마스터가 STOP을 구동하는 경우), 또는 버스 마스터가 동일한 방향성을 가진 정당한 WRITE-repeated-START-WRITE 시퀀스를 발행하는 경우, 드라이버는 영구적으로 CMD_SEND 상태에 머무르며 타겟의 수명 동안 write_requested()를 다시 호출하지 않습니다.
같은 물리적 버스에 연결된 I2C 마스터가 이를 의도적으로 트리거하면 모든 후속 쓰기 트랜잭션에서 I2C 타겟 기능이 오작동하고 소비자 프레임 상태(예: MCTP-over-I2C)의 동기화가 해제되어, 타겟 주변 장치에 대한 리셋으로 복구 가능한 서비스 거부(Denial of Service)가 발생합니다.
이 수정은 START_DET를 언마스크하여 모든 버스 (재)START 시 상태를 재설정합니다. 영향력은 로컬 보드 레벨 버스를 통한 가용성(Availability)에만 국한되며, 인-트리(consumer) 내에서는 바이트 단위 쓰기마다 독립적으로 경계 체크(bounds-checked)가 수행되므로 메모리 부패(memory corruption)는 발생하지 않습니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.