🇰🇷 한글 설명
Linux 커널의 virtio_pci 드라이버에서 관리용 가상 큐(admin vq)를 정리할 때 잘못된 정보 포인터를 참조하여 발생하는 취약점입니다. 이로 인해 커널의 NULL 포인터 역참조(NULL pointer dereference)가 발생하여 시스템이 충돌하거나 중단될 수 있습니다.
💡 쉬운 설명
컴퓨터의 가상 장치를 정리하는 과정에서 엉뚱한 메모리 주소를 참조하여 시스템이 멈추거나 오류가 발생하는 문제입니다. 관리자가 장치를 초기화하거나 제거할 때 시스템 전체에 영향을 줄 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
virtio_pci: Fix admin vq cleanup by using correct info pointer
vp_modern_avq_cleanup() and vp_del_vqs() clean up admin vq
resources by virtio_pci_vq_info pointer. The info pointer of admin
vq is stored in vp_dev->admin_vq.info instead of vp_dev->vqs[].
Using the info pointer from vp_dev->vqs[] for admin vq causes a
kernel NULL pointer dereference bug.
In vp_modern_avq_cleanup() and vp_del_vqs(), get the info pointer
from vp_dev->admin_vq.info for admin vq to clean up the resources.
Also make info ptr as argument of vp_del_vq() to be symmetric with
vp_setup_vq().
vp_reset calls vp_modern_avq_cleanup, and causes the Call Trace:
==================================================================
BUG: kernel NULL pointer dereference, address:0000000000000000
...
CPU: 49 UID: 0 PID: 4439 Comm: modprobe Not tainted 6.11.0-rc5 #1
RIP: 0010:vp_reset+0x57/0x90 [virtio_pci]
Call Trace:
<TASK>
...
? vp_reset+0x57/0x90 [virtio_pci]
? vp_reset+0x38/0x90 [virtio_pci]
virtio_reset_device+0x1d/0x30
remove_vq_common+0x1c/0x1a0 [virtio_net]
virtnet_remove+0xa1/0xc0 [virtio_net]
virtio_dev_remove+0x46/0xa0
...
virtio_pci_driver_exit+0x14/0x810 [virtio_pci]
==================================================================
📍 영향받는 시스템
Linux kernel (virtio_pci 드라이버를 사용하는 환경, 특히 6.11.0-rc5 이전 버전)
⚔️ 공격 벡터
로컬 공격자가 가상 장치를 조작하거나 제거하여 커널 패닉을 유도하는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 패치 버전 이후인지 확인하십시오.