🇰🇷 한글 설명
Linux 커널의 DRM VKMS 드라이버에서 vkms_init() 함수가 vkms_create()의 반환값을 확인하지 않아, 생성 실패 시 앞서 할당한 config 메모리가 해제되지 않고 누수되는 문제입니다. 반환값을 검사하고 오류 발생 시 config를 해제하도록 수정되었습니다.
💡 쉬운 설명
가상 디스플레이 모듈을 설치하다 실패하면 사용하던 메모리가 반납되지 않고 남아 버립니다. 이 메모리 누수는 시간이 지나며 시스템 자원을 조금씩 소모하게 만듭니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/vkms: Fix memory leak in vkms_init()
A memory leak was reported after the vkms module install failed.
unreferenced object 0xffff88810bc28520 (size 16):
comm "modprobe", pid 9662, jiffies 4298009455 (age 42.590s)
hex dump (first 16 bytes):
01 01 00 64 81 88 ff ff 00 00 dc 0a 81 88 ff ff ...d............
backtrace:
[<00000000e7561ff8>] kmalloc_trace+0x27/0x60
[<000000000b1954a0>] 0xffffffffc45200a9
[<00000000abbf1da0>] do_one_initcall+0xd0/0x4f0
[<000000001505ee87>] do_init_module+0x1a4/0x680
[<00000000958079ad>] load_module+0x6249/0x7110
[<00000000117e4696>] __do_sys_finit_module+0x140/0x200
[<00000000f74b12d2>] do_syscall_64+0x35/0x80
[<000000008fc6fcde>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
The reason is that the vkms_init() returns without checking the return
value of vkms_create(), and if the vkms_create() failed, the config
allocated at the beginning of vkms_init() is leaked.
vkms_init()
config = kmalloc(...) # config allocated
...
return vkms_create() # vkms_create failed and config is leaked
Fix this problem by checking return value of vkms_create() and free the
config if error happened.
📍 영향받는 시스템
메모리 누수 수정이 적용되기 전의 Linux 커널 (VKMS 드라이버 포함 버전)
⚔️ 공격 벡터
로컬 사용자가 모듈 적재를 반복적으로 실패시켜 커널 메모리를 점진적으로 소모하게 만들 수 있으며, 주로 서비스 거부(DoS) 성격의 영향입니다.
🛡️ 대응 방법
Linux 커널을 해당 CVE 수정이 포함된 최신 안정 버전으로 업데이트하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 커널 패치 목록과 대조해 수정 버전 이상인지 확인하고, vkms 모듈이 로드되지 않았다면 이 취약점에 노출되지 않은 것으로 볼 수 있습니다.
uname -r && (lsmod | grep -i vkms || echo 'vkms 모듈 미로드')