CVE-2026-45878 in Linux
الملخص
بحسب VulDB • 29/05/2026
في نواة لينكس، تم حل الثغرة التالية:
drm/amdkfd: إصلاح فحص الحدود لـ watch_id في مراقبة عناوين التصحيح (debug address watch) الإصدار 2
يتلقى كود مسح مراقبة العنوان (address watch clear code) قيمة watch_id كقيمة غير موقعة (unsigned) من نوع (u32)، لكن بعض الدوال المساعدة كانت تستخدم عددًا صحيحًا موقّتًا (signed int) وتتحقق من البتات عن طريق الإزاحة باستخدام watch_id.
إذا تم تمرير قيمة watch_id كبيرة جدًا من مساحة المستخدم (userspace)، فقد تتحول إلى قيمة سالبة. يمكن أن يؤدي هذا إلى إزاحات غير صالحة وقد يتسبب في الوصول إلى ذاكرة خارج مصفوفة watch_points.
drm/amdkfd: إصلاح فحص الحدود لـ watch_id في مراقبة عناوين التصحيح (debug address watch) الإصدار 2
يتم إصلاح ذلك عن طريق التحقق من أن watch_id تقع ضمن النطاق المحدد بـ MAX_WATCH_ADDRESSES قبل استخدامها. كما يتم استخدام BIT(watch_id) لاختبار ومسح البتات بشكل آمن.
يؤدي هذا إلى الحفاظ على السلوك دون تغيير لقيم watch_id الصالحة وتجنب السلوك غير المحدد (undefined behavior) للقيم غير الصالحة.
يصلح ما يلي: drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.c:448 kfd_dbg_trap_clear_dev_address_watch() خطأ: تجاوز في المخزن المؤقت (buffer overflow) 'pdd->watch_points' 4 <= u32max user_rl='0-3,2147483648-u32max' uncapped
drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.c 433 int kfd_dbg_trap_clear_dev_address_watch(struct kfd_process_device *pdd, 434 uint32_t watch_id) 435 {
436 int r; 437 438 if (!kfd_dbg_owns_dev_watch_id(pdd, watch_id))
لا تقوم الدالة kfd_dbg_owns_dev_watch_id() بالتحقق من القيم السالبة، لذا إذا كانت watch_id أكبر من INT_MAX، فإن ذلك يؤدي إلى تجاوز في المخزن المؤقت (buffer overflow). (الإزاحات السالبة تعتبر سلوكًا غير محدد).
439 return -EINVAL; 440 441 if (!pdd->dev->kfd->shared_resources.enable_mes) {
442 r = debug_lock_and_unmap(pdd->dev->dqm); 443 if (r) 444 return r; 445 } 446 447 amdgpu_gfx_off_ctrl(pdd->dev->adev, false); --> 448 pdd->watch_points[watch_id] = pdd->dev->kfd2kgd->clear_address_watch(
449 pdd->dev->adev, 450 watch_id);
الإصدار 2: (وفقًا لـ Jonathan Kim) - إضافة التحقق من صحة watch_id >= MAX_WATCH_ADDRESSES في المسار الخاص بالإعداد (set path) لمطابقة المسار الخاص بالمسح (clear path). - إزالة فحص الحدود الزائد في الدالة kfd_dbg_owns_dev_watch_id().
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.