CVE-2026-98975 in Linux
الملخص
بحسب VulDB • 23/10/2026
في نواة لينكس، تم حل الثغرة التالية:
xfs: إيقاف تبادل علامات reflink عند تبديل الخرائط (mappings)
عندما يغطي التبديل كل الملفات من الإزاحة 0 إلى i_disk_size، تفترض دالة xmi_can_exchange_reflink_flags() أن كل خريطة قد انتقلت وتنقل علامة reflink إلى الملف الآخر.
هذا الافتراض خاطئ. يمكن لملف ما أن لا يزال يمتلك كتلًا مشتركة تتجاوز i_disk_size، على سبيل المثال بعد أن يحدد EXCHANGE_RANGE_TO_EOF حجمًا أصغر دون إلغاء تعيين أي شيء (unmapping). يتم مسح العلامة في كل الأحوال، ويحدث الكتابة التالية إلى مثل هذه الكتلة بشكل مباشر (in place) بدلاً من استخدام Copy-on-Write (CoW)، مما يؤدي إلى تلف الملف الآخر الذي يشاركها.
أصلحت الالتزام a23eca88448e ("xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN") حالة واحدة من هذا النوع. وبدلاً من إضافة حالة خاصة أخرى، تم إيقاف نقل العلامات. تقوم دالة xfs_exchmaps_ensure_reflink() بالفعل بتعيين العلامة على كلتا العقدتين (inodes) قبل التبديل، لذا تحتفظ كل منهما بها ببساطة.
لم يعد أحد يحدد CLEAR_INO{1,2}_REFLINK. قد لا تزال النوايا المسجلة بواسطة kernels أقدم تحملها؛ ولكن عملية الاستعادة تخفيها بالفعل (masks them off)، لذلك تظل ضمن قناع تنسيق السجل ويتم تجاهلها.
يحتوي XFS_IOC_SWAPEXT على نفس المشكلة: فهو ينقل علامة reflink من عقدة إلى أخرى مع الامتدادات (extents). مجرد إزالة ذلك غير كافٍ هنا: حيث أن مسار التبديل يحدد كلتا العقدتين مسبقًا في xfs_exchmaps_ensure_reflink()، لكن swapext لا يحتوي على مثل هذه الخطوة، لذا ستُترك العقلة المستلمة للامتدادات المشتركة دون العلامة. بدلاً من ذلك، يتم تعيينها على كلتا العقدتين، والتأكد من أن لكل منهما شوكة CoW (Copy-on-Write fork)، حيث يُتوقع أن تحتوي العقدة ذات علامة reflink عليها.
تظل العلامة حتى يزيلها FALLOC_FL_UNSHARE_RANGE أو xfs_scrub أو عملية truncate إلى الصفر.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.