🇰🇷 한글 설명
Linux 커널의 pinctrl 드라이버에서 create_pinctrl() 함수가 pinctrl_maps_mutex를 보유한 상태로 add_setting()을 호출할 때, -EPROBE_DEFER 오류 발생 시 pinctrl_free()를 호출하는데, 이 함수도 동일한 mutex를 획득하려 하여 deadlock이 발생합니다. 이는 pinctrl_free() 호출 전 mutex를 해제하여 해결됩니다.
💡 쉬운 설명
리눅스 시스템의 핀 제어 기능 초기화 중 작업을 미룰 때, 시스템이 같은 자원을 두 번 잠그려고 해서 멈추는 문제입니다. 잠금 순서를 바꾸면 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER
In create_pinctrl(), pinctrl_maps_mutex is acquired before calling
add_setting(). If add_setting() returns -EPROBE_DEFER, create_pinctrl()
calls pinctrl_free(). However, pinctrl_free() attempts to acquire
pinctrl_maps_mutex, which is already held by create_pinctrl(), leading to
a potential deadlock.
This patch resolves the issue by releasing pinctrl_maps_mutex before
calling pinctrl_free(), preventing the deadlock.
This bug was discovered and resolved using Coverity Static Analysis
Security Testing (SAST) by Synopsys, Inc.
📍 영향받는 시스템
Linux 커널 5.10 이상 (pinctrl 드라이버 포함된 모든 배포판)
⚔️ 공격 벡터
부팅 또는 드라이버 로드 중 하드웨어 프로브 지연 조건을 유발하여 deadlock 트리거
🛡️ 대응 방법
Linux 커널을 CVE-2024-42090 패치 적용 버전으로 업데이트 (5.15.165+, 6.1.98+, 6.6.39+, 6.9.9+ 이상)
🔧 검증 코드
커널 버전 확인 후 취약 버전 범위와 비교하고, 시스템 로그에서 pinctrl 관련 deadlock 메시지 유무 확인
uname -r; dmesg | grep -i 'pinctrl\|deadlock' | tail -5