🇰🇷 한글 설명
Linux 커널의 i2c QUP 드라이버에서 타임아웃 발생 시 루프를 빠져나가지 않는 문제가 수정되었습니다. 기존에는 반환값만 설정하고 버스가 클라이언트에 의해 활성 상태로 유지되면 루프를 계속 돌았으며, 이제는 -ETIMEDOUT을 반환하며 즉시 호출자에게 돌아갑니다.
💡 쉬운 설명
문제가 있는 주변기기 장치가 컴퓨터의 연결 통로를 계속 점유하면 운영체제가 멈출 수 있었습니다. 이번 수정으로 일정 시간이 지나면 작업을 포기하고 정상적으로 복귀하도록 바뀌었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
i2c: qup: jump out of the loop in case of timeout
Original logic only sets the return value but doesn't jump out of the
loop if the bus is kept active by a client. This is not expected. A
malicious or buggy i2c client can hang the kernel in this case and
should be avoided. This is observed during a long time test with a
PCA953x GPIO extender.
Fix it by changing the logic to not only sets the return value, but also
jumps out of the loop and return to the caller with -ETIMEDOUT.
📍 영향받는 시스템
Qualcomm QUP 기반 I2C 컨트롤러를 사용하는 Linux 커널 시스템 (수정이 포함된 커널 버전 이전)
⚔️ 공격 벡터
악성 또는 결함이 있는 I2C 클라이언트 장치가 버스를 계속 활성 상태로 유지하여 커널이 무한 루프에 빠지도록 유도 (로컬 물리 장치 또는 드라이버 수준 접근 필요)
🛡️ 대응 방법
해당 수정이 포함된 최신 Linux 커널로 업데이트하거나 배포판의 보안 패치를 적용하세요.
🔧 검증 코드
출력된 커널 버전을 배포판의 패치 목록과 대조해 수정 포함 여부를 확인하고, QUP 관련 장치가 없으면 이 취약점의 영향을 받지 않는 것으로 판단합니다.
uname -r && grep -i qup /proc/interrupts 2>/dev/null | head -n 3