CVE-2024-55916 in Linux
요약
\~에 의해 VulDB • 2026. 05. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
드라이버: hv: util: 아직 초기화되지 않은 ringbuffer에 대한 접근 방지
KVP(또는 VSS) 데몬이 VMBus 채널의 ringbuffer가 완전히 초기화되기 전에 시작되면, 아래에서 보이는 패닉이 발생할 수 있습니다:
hv_utils: HyperV Utility Driver 등록 중 hv_vmbus: 드라이버 hv_utils 등록 중 ... BUG: kernel NULL pointer dereference, address: 0000000000000000 CPU: 44 UID: 0 PID: 2552 Comm: hv_kvp_daemon Tainted: G E 6.11.0-rc3+ #1 RIP: 0010:hv_pkt_iter_first+0x12/0xd0 Call Trace: ... vmbus_recvpacket hv_kvp_onchannelcallback vmbus_on_event tasklet_action_common tasklet_action handle_softirqs irq_exit_rcu sysvec_hyperv_stimer0 asm_sysvec_hyperv_stimer0 ... kvp_register_done hvt_op_read vfs_read ksys_read __x64_sys_read
이는 KVP/VSS 채널 콜백이 채널이 완전히 열리기 전에 호출될 수 있기 때문에 발생합니다: 1) hv_kvp_init() -> hvutil_transport_init()가 /dev/vmbus/hv_kvp를 생성하는 즉시, kvp 데몬은 장치 파일을 즉시 열 수 있으며, 파일에 메시지 KVP_OP_REGISTER1을 작성하여 드라이버에 자신을 등록할 수 있습니다(이는 kvp_on_msg() -> kvp_handle_handshake()에서 처리됨). 또한 드라이버의 응답을 위해 파일을 읽을 수 있으며, 이는 hvt_op_read()에서 처리되고, 이는 hvt->on_read(), 즉 kvp_register_done()를 호출합니다.
2) kvp_register_done()의 문제는 채널이 완전히 열리기 전에 채널 콜백이 호출될 수 있다는 점이며, 채널 콜백이 실행을 시작할 때 util_probe() -> vmbus_open()이 아직 ringbuffer를 초기화하지 않았을 수 있으므로, 콜백이 NULL pointer dereference 패닉에 부딪힐 수 있습니다.
패닉을 일관되게 재현하려면 __vmbus_open() 내 첫 번째 hv_ringbuffer_init() 직전에 KVP에 "ssleep(10)"을 추가한 다음, 드라이버 hv_utils를 언로드하고 다시 로드하여 10초 이내에 데몬을 수동으로 실행할 수 있습니다.
util_probe()의 단계를 재배열하여 KVP 또는 VSS 데몬이 사용하는 char dev 엔트리가 vmbus_open()이 완료된 후에만 생성되도록 함으로써 패닉을 수정합니다. 이 재배열은 race condition이 발생하는 것을 방지합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.