🇰🇷 한글 설명
Linux 커널의 cxl 드라이버에서 cxl_pci_init_afu/adapter() 함수 실행 중 device_register() 실패 시, 등록되지 않은 장치에 대해 device_unregister()를 호출하여 NULL 포인터 역참조가 발생할 수 있는 문제입니다. 해결책으로 device_del()과 put_device()로 분리하여 올바른 참조 해제 절차를 따르도록 수정되었습니다.
💡 쉬운 설명
장치 등록에 실패했을 때 존재하지 않는 장치를 제거하려다 시스템이 비정상 종료될 수 있는 오류입니다. 커널 패치로 올바른 정리 절차를 사용하도록 고쳐졌습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
cxl: fix possible null-ptr-deref in cxl_pci_init_afu|adapter()
If device_register() fails in cxl_pci_afu|adapter(), the device
is not added, device_unregister() can not be called in the error
path, otherwise it will cause a null-ptr-deref because of removing
not added device.
As comment of device_register() says, it should use put_device() to give
up the reference in the error path. So split device_unregister() into
device_del() and put_device(), then goes to put dev when register fails.
📍 영향받는 시스템
CXL(Compute Express Link) 드라이버를 포함한 수정 이전의 Linux 커널 버전
⚔️ 공격 벡터
로컬 사용자가 장치 초기화 실패 상황을 유도해 커널 NULL 포인터 역참조로 서비스 거부(커널 패닉)를 일으킬 수 있음
🛡️ 대응 방법
패치가 포함된 최신 Linux 커널로 업데이트하거나 배포판의 보안 업데이트를 적용
🔧 검증 코드
커널 버전이 패치가 반영된 버전 이상인지 확인하고, cxl 모듈이 로드되지 않았다면 이 취약점의 영향을 받지 않는 것으로 판단합니다.
uname -r && (grep -i cxl /proc/modules 2>/dev/null || echo 'cxl module not loaded')