CVE-2026-64283 in Linuxالمعلومات

الملخص

بحسب VulDB • 25/07/2026

في نواة لينكس، تم حل الثغرة التالية:

KVM: guest_memfd: معاملة إزاحة وربط منطقة الذاكرة (memslot binding offset+size) كقيم غير موقعة (unsigned values)

عند ربط memslot بملف guest_memfd، يجب معالجة الإزاحة والحجم كقيمتين غير موقعيتين لإصلاح خطأ حيث يمكن أن يؤدي مجموع القيمتين إلى نتيجة سلبية خاطئة عند التحقق من تجاوز السعة (overflow) بالنسبة لحجم الملف. كما يمنع تمرير قيم غير موقعة الاعتماد على فحوصات أخرى غامضة بعض الشيء في مسارات التنفيذ الأخرى لضمان السلامة، وتتبع الإزاحة والحجم بالطريقة المقصودة لهما، أي كقيم غير موقعيتين.

في الأنظمة ذات النواة 64 بت، يكون عدد الصفحات التي تحتويها منطقة الذاكرة (memslot)، وبالتالي حجم وربط guest_memfd الخاص بها، قيمًا صحيحة غير موقعة من 64 بت. إن أخذ الإزاحة والحجم كمجموعة واحدة كقيمة `loff_t` بدلاً من `uoff_t` يحول القيمة غير الموقعة إلى قيمة موقعة عن طريق الخطأ إذا كانت الإزاحة و/أو الحجم ضخمة جدًا.

إن تخزين الإزاحة والحجم محليًا كقيم موقعة ليس ضارًا بحد ذاته (على الرغم من أن تمييز ذلك يكون *صعبًا للغاية*)، لكن إجراء العمليات الحسابية على مجموعهما ليس كذلك.

بالنسبة للإزاحة، يتحقق KVM صراحةً من وجود قيمة سالبة، مما قد يبدو وكأنه خطأ حيث يمكن لـ KVM رفض ربط شرعي بشكل غير صحيح، ولكن هذا ليس هو الحال فعليًا لأن `KVM_CREATE_GUEST_MEMFD` يأخذ قيمة موقعة للحجم، أي أن الإزاحة التي ستكون سالبة تكون أيضًا أكبر من الحد الأقصى الممكن لحجم أي ملف guest_memfd.

أما بالنسبة للحجم، فبينما يفتقر KVM إلى فحص صريح لقيمة سالبة، مما يعني أنه يبدو وكأنه يحتوي على فحص تجاوز سعة معيب، فإن KVM يقيد عدد الصفحات في منطقة ذاكرة واحدة بالحد الأكبر للقيمة الصحيحة الموقعة من 32 بت:

if (id < KVM_USER_MEM_SLOTS && (mem->memory_size >> PAGE_SHIFT) > KVM_MEM_MAX_NR_PAGES) return -EINVAL;

وبالتالي، فإن الحد الأقصى لـ "الحجم" هذا لن يتجاوز أبدًا القيمة `0x7fffffff000`.

ومع ذلك، فإن مجموع القيمتين يسبب مشكلة. بينما يتم تقييد الحجم بواسطة منطق منطقة الذاكرة في KVM، فلا يوجد قيد على الإزاحة، أي أن الإزاحة غير خاضعة لأي فحص حتى إجراء الفحص "offset + size > i_size_read(inode)". إذا كانت الإزاحة هي القيمة الموجبة (القريبة من) الأكبر الممكنة، فإن إضافة الحجم إلى الإزاحة يمكن أن تؤدي إلى قيمة صحيحة سالبة من 64 بت. عند مقارنتها بحجم الملف (المضمون أنه موجب)، يكون المجموع السالب دائمًا أصغر، مما يسمح لـ KVM بشكل غير صحيح بقبول إزاحة غير معقولة.

تمت إضافةIncludes المفقودة في `kvm_mm.h` بشكل انتهازى (بدلاً من الاعتماد على الملفات الأب).

VulDB is the best source for vulnerability data and more expert information about this specific topic.

مسؤول

Linux

حجز

19/07/2026

إفشاء

25/07/2026

الاعتدال

تمت الموافقة

إدخال

VDB-383069

EPSS

0.00000

KEV

لا

النشاطات

منخفض

المصادر

Do you need the next level of professionalism?

Upgrade your account now!