اعتمد Linux 5.12 kernel النظام الفرعي KFence لاكتشاف الأخطاء عند العمل مع الذاكرة

يتضمن Linux kernel 5.12، الذي هو قيد التطوير، تنفيذ آلية KFence (Kernel Electric Fence)، التي تتحقق من معالجة الذاكرة، وتلتقط تجاوزات المخزن المؤقت، والوصول إلى الذاكرة بعد تحريرها، وأخطاء أخرى من فئة مماثلة.

كانت وظيفة مماثلة موجودة بالفعل في النواة في شكل خيار بناء KASAN (مطهر عنوان kernel، يستخدم Address Sanitizer في دول مجلس التعاون الخليجي الحديثة و clang) - ومع ذلك، تم وضعه بشكل أساسي لاستخدام تصحيح الأخطاء. يختلف نظام KFence الفرعي عن KASAN في سرعة التشغيل العالية، مما يجعل من الممكن استخدام هذه الميزة حتى على النوى في أنظمة العمل.

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

يحقق KFence الحد الأدنى من الحمل المستقل عن التحميل عن طريق إدراج صفحات الحماية في الكومة على فترات زمنية ثابتة. بعد انتهاء فترة الحماية التالية، يقوم KFence، من خلال نظام تخصيص الذاكرة القياسي (مخصص SLAB أو SLUB)، بإضافة صفحة الحماية التالية من تجمع كائنات KFence، ويبدأ تقرير عداد زمني جديد. يقع كل كائن KFence في صفحة ذاكرة منفصلة، ​​وتشكل صفحات الذاكرة الموجودة على طول الحدود اليسرى واليمنى صفحات حماية، يتم اختيار حجمها عشوائيًا.

وبالتالي، يتم فصل الصفحات التي تحتوي على كائنات عن بعضها البعض بواسطة صفحات الحماية، والتي تم تكوينها لإنشاء "خطأ في الصفحة" عند أي وصول. لاكتشاف عمليات الكتابة خارج الحدود داخل صفحات الكائنات، يتم أيضًا استخدام "المناطق الحمراء" القائمة على النمط، والتي تشغل الذاكرة التي لا تستخدمها الكائنات، وتبقى عند محاذاة حجم صفحات الذاكرة. —+————+————+————+————+————+— | xxxxxxxxx | يا: | xxxxxxxxx | :يا | xxxxxxxxx | | xxxxxxxxx | ب: | xxxxxxxxx | :ب | xxxxxxxxx | | × الحرس × | ي : أحمر- | × الحرس × | أحمر- : ي | × الحرس × | | xxxxxxxxx | ه: المنطقة | xxxxxxxxx | المنطقة: ه | xxxxxxxxx | | xxxxxxxxx | ج: | xxxxxxxxx | :ج | xxxxxxxxx | | xxxxxxxxx | ت: | xxxxxxxxx | : ت | xxxxxxxxx | —+————+————+————+————+————+—

إذا جرت محاولة للوصول إلى منطقة خارج حدود المخزن المؤقت، فستؤثر العملية على صفحة الحماية، مما يؤدي إلى إنشاء "خطأ في الصفحة"، والذي يعترض KFence ويسجل معلومات حول المشكلة المحددة. افتراضيًا، لا يحظر KFence أي خطأ ويعرض فقط تحذيرًا في السجل، ولكن يوجد إعداد "panic_on_warn" الذي يسمح لك بوضع النواة في حالة ذعر في حالة اكتشاف خطأ.

المصدر: opennet.ru

إضافة تعليق