🇰🇷 한글 설명
Linux 커널의 DRM 드라이버에서 drm_gem_change_handle_ioctl() 함수가 INT_MAX를 초과하는 GEM 핸들 값을 검증 없이 처리하여, 사용자 공간에서 idr_alloc()의 커널 경고(WARN_ON_ONCE)를 트리거할 수 있는 문제입니다. 수정으로 INT_MAX 초과 핸들을 거부하고 끝 범위 계산을 int 영역으로 옮겼습니다.
💡 쉬운 설명
그래픽 드라이버가 너무 큰 번호를 잘못 받아들여 커널이 경고 메시지를 출력하게 만들 수 있는 결함입니다. 시스템 충돌이나 권한 상승보다는 경고 유발과 안정성 저하에 가까운 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm: Do not allow userspace to trigger kernel warnings in drm_gem_change_handle_ioctl()
Since GEM bo handles are u32 in the uapi and the internal implementation
uses idr_alloc() which uses int ranges, passing a new handle larger than
INT_MAX trivially triggers a kernel warning:
idr_alloc():
...
if (WARN_ON_ONCE(start < 0))
return -EINVAL;
...
Fix it by rejecting new handles above INT_MAX and at the same time make
the end limit calculation more obvious by moving into int domain.
📍 영향받는 시스템
패치 이전의 Linux 커널 (DRM/GEM 서브시스템을 사용하는 그래픽 기능 활성화 시스템)
⚔️ 공격 벡터
로컬 사용자가 DRM 장치에 대해 GEM 핸들 변경 ioctl 호출 시 INT_MAX보다 큰 새 핸들 값을 전달
🛡️ 대응 방법
배포판이 제공하는 최신 커널 보안 업데이트를 적용하고 재부팅
🔧 검증 코드
출력된 커널 버전이 배포판의 보안 패치가 적용된 버전인지 배포사 보안 공지와 대조하여 확인