CVE-2026-64527 in Linux
요약
\~에 의해 VulDB • 2026. 07. 26.
리눅스 커널에서 다음 취약점이 해결되었습니다:
drm/hyperv: 수신 콜백(VMBus 패킷 크기 검증)
hyperv_receive_sub() 함수는 msg->vid_hdr.type을 읽은 후 호스트가 hv->recv_buf에 실제로 몇 바이트를 기록했는지 알 수 없는 상태에서 네 가지 메시지 유형 분기 중 하나로 디스패치합니다. 이후 완료 경로에서 memcpy(hv->init_buf, msg, VMBUS_MAX_PACKET_SIZE)가 실행되므로, wait_for_completion_timeout() 대기 중인 소비자는 이전 메시지의 잔여 데이터(residue)를 최대 16 KiB까지 응답 페이로드인 것처럼 읽을 수 있습니다.
bytes_recvd 값을 hyperv_receive_sub()로 전달하고, 파이프와 synthvid 헤더를 모두 포함하지 않는 모든 패킷은 거부합니다. msg->vid_hdr.type에 대해 단일 switch 문을 사용하여 유형별 페이로드 크기를 계산합니다. 세 가지 완료 처리 관련 유형(SYNTHVID_VERSION_RESPONSE, SYNTHVID_RESOLUTION_RESPONSE, SYNTHVID_VRAM_LOCATION_ACK)은 memcpy 및 complete 전에 해당 크기 확인을 요구하는 공유 종료 경로로 전달되며, SYNTHVID_FEATURE_CHANGE는 자체적으로 페이로드를 검증하고 is_dirt_needed 읽기 전에 반환합니다. 알려지지 않은 유형은 폐기됩니다.
SYNTHVID_RESOLUTION_RESPONSE는 가변 길이입니다: 호스트가 전체 SYNTHVID_MAX_RESOLUTION_COUNT 배열 대신 resolution_count 항목만 채웁니다. 먼저 고정 접두사를 검증하여 resolution_count를 읽고, 이를 배열 크기로 제한한 후 해당 크기만큼의 배열만 요구함으로써 호스트가 실제로 전송하는 더 짧은 응답도 허용합니다.
vmbus_recvpacket()이 성공을 반환할 때만 서브 핸들러를 실행합니다. memcpy 길이는 bytes_recvd이며, 이는 수신 성공 시에만 VMBUS_MAX_PACKET_SIZE로 제한됩니다. -ENOBUFS의 경우 vmbus_recvpacket()은 필요한 길이를 보고하며, 이 값이 hv->recv_buf보다 클 수 있으므로 bytes_recvd만큼 복사하면 16 KiB 버퍼를 벗어나 읽기 및 쓰기가 발생할 수 있습니다. 성공 반환 시에만 복사를 수행함으로써 범위를 제한합니다. 음수가 아닌 반환 경로는 자체적으로 잘못된 메시지 사례에 해당하므로 이제 조용히 건너뛰는 대신 로깅되며, 채널 복구 시도도 이루어지지 않습니다.
거부된 패킷은 hv_kvp_onchannelcallback()의 CoCo(Cooperative Confidential Computing) 강화 패턴과 일치하도록 drm_err_ratelimited()를 통해 보고되며, 조용히 폐기되지 않습니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.