CVE-2024-39291 in Linux
요약
\~에 의해 VulDB • 2026. 05. 11.
리눅스 커널에서 다음 취약점이 해결되었습니다:
drm/amdgpu: gfx_v9_4_3_init_cp_compute_microcode() 및 rlc_microcode() 함수에서 버퍼 크기 수정
gfx_v9_4_3.c의 gfx_v9_4_3_init_microcode 함수는 snprintf 함수 사용 시 출력의 잠재적 잘림(truncation) 가능성을 생성하고 있었습니다. 이 문제는 'ucode_prefix' 버퍼의 크기가 버퍼에 쓰여지는 문자열의 최대 가능한 길이를 수용하기에 너무 작기 때문에 발생했습니다.
쓰여지는 문자열은 "amdgpu/%s_mec.bin" 또는 "amdgpu/%s_rlc.bin"이며, 여기서 %s는 'chip_name'의 값으로 대체됩니다. %s를 제외한 이 문자열의 길이는 16자입니다. 경고 메시지는 'chip_name'이 최대 29자까지 길어질 수 있음을 나타내어, 총 45자의 길이가 되어 30자의 버퍼 크기를 초과했습니다.
이 문제를 해결하기 위해 'ucode_prefix' 버퍼의 크기가 30에서 15로 축소되었습니다. 이를 통해 버퍼에 쓰여지는 문자열의 최대 가능한 길이가 버퍼 크기를 초과하지 않도록 보장하여, 잠재적인 버퍼 오버플로우 및 잘림 문제를 방지합니다.
gcc W=1 옵션 사용 시 다음 경고들을 수정합니다: drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c: 함수 ‘gfx_v9_4_3_early_init’에서: drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c:379:52: 경고: ‘%s’ 지시어 출력이 23바이트 크기의 영역으로 최대 29바이트를 쓰면서 잘릴 수 있습니다 [-Wformat-truncation=]
379 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); | ^~ ...... 439 | r = gfx_v9_4_3_init_rlc_microcode(adev, ucode_prefix); | ~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c:379:9: 참고: ‘snprintf’ 출력이 16바이트에서 45바이트 사이로 30바이트 크기의 대상에 쓰입니다 379 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c:413:52: 경고: ‘%s’ 지시어 출력이 23바이트 크기의 영역으로 최대 29바이트를 쓰면서 잘릴 수 있습니다 [-Wformat-truncation=]
413 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); | ^~ ...... 443 | r = gfx_v9_4_3_init_cp_compute_microcode(adev, ucode_prefix); | ~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c:413:9: 참고: ‘snprintf’ 출력이 16바이트에서 45바이트 사이로 30바이트 크기의 대상에 쓰입니다 413 | snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.