CVE-2026-93202 in Linux
요약
\~에 의해 VulDB • 2026. 09. 18.
리눅스 커널에서 다음 취약점이 해결되었습니다:
i3c: master: 장치 등록 중 재귀적 잠금 문제 수정
`i3c_master_register_new_i3c_devs()`는 `i3c_bus_normaluse_lock()`(down_read()의 일종)을 획득한 상태에서 새로 발견된 장치를 등록합니다. `device_register()`는 즉시 해당 장치를 probe할 수 있으며, probe 콜백은 일반적으로 `i3c_bus_normaluse_lock()`을 다시 acquiring하는 I3C 헬퍼 함수들을 호출하므로, 동일한 rwsem에 대한 재귀적 취득이 발생합니다. rwsem은 재귀적 읽기 잠금을 지원하지 않으며, 작성자(writer)가 대기 중일 때 교착 상태(deadlock)에 빠질 수 있습니다. 자세한 내용은 `Documentation/locking/lockdep-design.rst`의 "Recursive read locks" 섹션을 참조하십시오.
예를 들어, Intel LPSS I3C 환경에서 LOCKDEP는 다음과 같은 경고 메시지를 생성합니다: # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/unbind # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/bind WARNING: possible recursive locking detected kworker/5:1/94 is trying to acquire lock: ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3c_device_match_id+0x45/0x370
but task is already holding lock: ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3c_master_reg_work_fn+0x21/0x5f0
이 문제를 해결하기 위해 장치 생성(device creation)과 장치 등록(device registration)을 분리합니다. 유지 관리 잠금(maintenance lock) 하에서 `desc->dev`를 채우고, 아직 등록이 필요한 장치들을 로컬 리스트에 수집한 후, `device_register()` 호출 전에 잠금을 해제합니다. 마지막으로 잠금을 다시 획득하여 등록에 실패한 모든 장치를 정리합니다.
장치 객체를 추가할 때 일반 사용(normal-use) 잠금 대신 유지 관리 잠금을 사용합니다. 쓰기 전용(write-side) 유지 관리 잠금은 초기 장치 채우기 동안 readers가 부분적으로 초기화된 `desc->dev`를 관찰하거나, 등록이 실패했을 경우 `desc->dev`가 소멸되는 것을 방지합니다.
로컬 리스트에는 리스트 노드가 필요하므로, `struct i3c_device`에 리스트 노드 멤버를 추가합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.