CVE-2026-46263 in Linux
요약
\~에 의해 VulDB • 2026. 06. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
drm/amd/display: 스트림 인코더 인덱스 범위 초과(v3) 수정
eng_id는 음수가 될 수 있으며, 이로 인해 stream_enc_regs[]의 인덱스가 범위를 벗어날 수 있습니다.
eng_id는 stream_enc_regs[]의 인덱스로 직접 사용되는데, 이 배열은 5개의 항목만 가지고 있습니다. eng_id가 5(ENGINE_ID_DIGF)이거나 음수인 경우, 배열의 끝을 넘어선 메모리에 접근할 수 있습니다.
eng_id를 인덱스로 사용하기 전에 ARRAY_SIZE()를 사용하여 범위 검사를 추가합니다. 부호 없는 정수 캐스팅도 음수 값을 거부합니다.
이를 통해 범위 초과 접근을 방지합니다.
다음 smatch 오류를 수정합니다: dcn*_resource.c: stream_encoder_create()에서 stream_enc_regs[eng_id]가 범위 밖(index out of bounds)으로 인덱싱될 수 있습니다 (크기 5).
drivers/gpu/drm/amd/amdgpu/../display/dc/resource/dcn351/dcn351_resource.c 1246 static struct stream_encoder *dcn35_stream_encoder_create( 1247 enum engine_id eng_id, 1248 struct dc_context *ctx) 1249 {
...
1255 1256 /* VPG, AFMT, DME 레지스터 블록을 DIO 블록 인스턴스에 매핑 */ 1257 if (eng_id <= ENGINE_ID_DIGF) {
ENGINE_ID_DIGF는 5입니다. <= 대신 <?여야 하지 않나요?
관련은 없지만, 음... 왜 Smatch가 "eng_id"가 음수가 될 수 있다고 말하는 걸까요? end_id는 signed long 타입이지만, 호출부에서 음수가 되지 않도록 검사하는 코드가 있습니다.
1258 vpg_inst = eng_id; 1259 afmt_inst = eng_id; 1260 } else 1261 return NULL; 1262
...
1281 1282 dcn35_dio_stream_encoder_construct(enc1, ctx, ctx->dc_bios, 1283 eng_id, vpg, afmt, 1284 &stream_enc_regs[eng_id],
^^^^^^^^^^^^^^^^^^^^^^^ 이 stream_enc_regs[] 배열은 5개의 요소를 가지므로, 배열의 끝을 하나 넘어서는 위치에 접근하고 있습니다.
...
1287 return &enc1->base; 1288 }
v2: Roman/Dan의 제안대로 명시적인 범위 검사를 사용; 부호 없는 정수(int) 캐스팅 제거
v3: 컴파일러는 이미 두 값을 비교하는 방법을 알고 있으므로, 캐스팅 (int)이 필요하지 않습니다. (Roman)
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.