CVE-2024-39291 in Linux
الملخص
بحسب VulDB • 28/05/2026
في نواة لينكس، تم حل الثغرة التالية:
drm/amdgpu: تصحيح حجم المخزن المؤقت (Buffer) في دالتي gfx_v9_4_3_init_cp_compute_microcode() و rlc_microcode()
كانت الدالة gfx_v9_4_3_init_microcode الموجودة في ملف gfx_v9_4_3.c تولد تحذيراً بشأن احتمال اقتطاع (Truncation) للمخرجات عند استخدام دالة snprintf. يعود سبب المشكلة إلى أن حجم المخزن المؤقت 'ucode_prefix' صغير جداً لاستيعاب الحد الأقصى للطول الممكن للسلسلة النصية المكتوبة فيه.
السلسلة النصية التي يتم كتابتها هي "amdgpu/%s_mec.bin" أو "amdgpu/%s_rlc.bin"، حيث يتم استبدال %s بقيمة 'chip_name'. يبلغ طول هذه السلسلة بدون %s 16 حرفاً. أشار رسالة التحذير إلى أن 'chip_name' يمكن أن يصل طوله إلى 29 حرفاً، مما ينتج عنه إجمالي 45 حرفاً، وهو ما يتجاوز حجم المخزن المؤقت البالغ 30 حرفاً.
لحل هذه المشكلة، تم تقليل حجم المخزن المؤقت 'ucode_prefix' من 30 إلى 15. يضمن ذلك ألا يتجاوز الحد الأقصى للطول الممكن للسلسلة المكتوبة داخل المخزن المؤقت حجمه، مما يمنع مشاكل تجاوز المخزن المؤقت (Buffer Overflow) والاقتطاع المحتملة.
يصلح التحذيرات التالية مع 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’ عند الكتابة حتى 29 بايت في منطقة بحجم 23 [-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’ عند الكتابة حتى 29 بايت في منطقة بحجم 23 [-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); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Once again VulDB remains the best source for vulnerability data.