CVE-2026-64527 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
drm/hyperv: التحقق من حجم حزمة VMBus في دالة استقبال الاستدعاء (receive callback)
تقوم الدالة `hyperv_receive_sub()` بقراءة `msg->vid_hdr.type` وتوجيه التنفيذ إلى أحد فروع أنواع الرسائل الأربعة دون معرفة عدد البايتات التي كتبها المضيف (host) داخل `hv->recv_buf`. بعد ذلك، ينفذ مسار الإكمال (`completion path`) الأمر `memcpy(hv->init_buf, msg, VMBUS_MAX_PACKET_SIZE)`؛ مما يسمح للمستهلك الذي يستيقظ على انتظار انتهاء المهلة عبر `wait_for_completion_timeout()` بقراءة ما يصل إلى 16 كيلوبايت من البيانات المتبقية (residue) لرسالة سابقة وكأنها حمولة الاستجابة.
تمرير متغير `bytes_recvd` إلى الدالة `hyperv_receive_sub()` ورفض أي حزمة لا تغطي كلًا من رأس الأنبوب (`pipe`) ورأس synthvid. ثم يقوم مفتاح تبديل واحد على `msg->vid_hdr.type` بحساب حجم الحمولة الخاص بالنوع: حيث تنسدل الأنواع الثلاثة التي تقود الإكمال (SYNTHVID_VERSION_RESPONSE، SYNTHVID_RESOLUTION_RESPONSE، SYNTHVID_VRAM_LOCATION_ACK) إلى مخرج مشترك يتطلب هذا الحجم قبل تنفيذ `memcpy/complete`، بينما تقوم SYNTHVID_FEATURE_CHANGE بالتحقق من حمولتها الخاصة والعودة قبل قراءة متغير is_dirt_needed. يتم تجاهل الأنواع المجهولة (Unknown types).
تعد حزمة SYNTHVID_RESOLUTION_RESPONSE ذات طول متغير: حيث يملأ المضيف إدخالات `resolution_count` وليس مصفوفة SYNTHVID_MAX_RESOLUTION_COUNT الكاملة. تحقق أولاً من البادئة الثابتة حتى يمكن قراءة `resolution_count`، وحددها مقابل المصفوفة، ثم اطلب فقط حجم المصفوفة المطابق للعدد؛ بحيث يتم قبول الاستجابات الأقصر التي يرسلها المضيف فعليًا.
قم بتشغيل المعالج الفرعي (sub-handler) فقط عندما تُرجع الدالة `vmbus_recvpacket()` نجاح العملية. طول عملية النسخ هو `bytes_recvd`، وهو محصور بـ VMBUS_MAX_PACKET_SIZE فقط عند استقبال ناجح؛ ففي حالة حدوث خطأ -ENOBUFS، فإن دالة vmbus_recvpacket() تبلغ عن الطول المطلوب بدلاً من ذلك، والذي قد يتجاوز حجم `hv->recv_buf`، لذا فإن نسخ bytes_recvd سيؤدي إلى قراءة وكتابة خارج حدود المخازن المؤقتة بحجم 16 كيلوبايت. إن تقييد النسخ على حالة الإرجاع الناجح يحافظ على الحدود الآمنة للمساحة المنسوخة. مسار العودة بقيمة غير صفرية هو بحد ذاته حالة رسالة مشوهة، ويتم تسجيله الآن بدلاً من تجاهله بصمت؛ ولا يتم محاولة استعادة القناة (channel recovery).
يتم الإبلاغ عن الحزم المرفوضة عبر `drm_err_ratelimited()` بدلاً من إسقاطها بصمت، بما يتماشى مع نمط CoCo-hardened الموجود في hv_kvp_onchannelcallback().
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.