🇰🇷 한글 설명
Linux 커널의 USB UCSI 드라이버에서 ucsi_init() 실패 시 ucsi->connector가 NULL인 상태에서 ucsi_connector_change()가 호출되어 NULL 포인터 역참조가 발생하는 문제입니다. 수정은 ucsi_init()이 성공한 후에만 ucsi->ntfy를 설정하도록 변경하는 것입니다.
💡 쉬운 설명
USB Type-C 전원·연결 관리 기능의 초기화가 실패했는데도 이벤트가 들어와 잘못된 메모리를 참조하면서 시스템이 비정상 종료될 수 있습니다. 패치로 초기화가 끝난 뒤에만 이벤트를 처리하도록 바뀝니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
usb: ucsi: Fix NULL pointer deref in ucsi_connector_change()
When ucsi_init() fails, ucsi->connector is NULL, yet in case of
ucsi_acpi we may still get events which cause the ucs_acpi code to call
ucsi_connector_change(), which then derefs the NULL ucsi->connector
pointer.
Fix this by not setting ucsi->ntfy inside ucsi_init() until ucsi_init()
has succeeded, so that ucsi_connector_change() ignores the events
because UCSI_ENABLE_NTFY_CONNECTOR_CHANGE is not set in the ntfy mask.
📍 영향받는 시스템
UCSI(USB Type-C Connector System Software Interface)를 사용하는 ucsi_acpi 드라이버 기반 Linux 커널 (수정 이전 버전)
⚔️ 공격 벡터
로컬 환경에서 초기화 실패 상태의 UCSI 장치가 이벤트를 발생시키면 커널 NULL 포인터 역참조로 서비스 거부(커널 패닉)가 발생할 수 있습니다.
🛡️ 대응 방법
배포판의 최신 커널 업데이트를 적용하거나, 해당 upstream 수정 커밋이 포함된 커널로 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 업데이트 공지와 대조해 수정된 버전인지 확인하고, CONFIG_UCSI_ACPI가 'y' 또는 'm'이면 해당 드라이버가 활성화되어 영향 가능성이 있음을 의미하며, 아무것도 나오지 않으면 드라이버가 없어 영향이 없습니다.
uname -r && (grep -E 'CONFIG_USB_ROLE_SWITCH|CONFIG_TYPEC_UCSI|CONFIG_UCSI_ACPI' /boot/config-$(uname -r) 2>/dev/null)