هسته لینوکس 5.12 از زیرسیستم KFence برای شناسایی خطاها هنگام کار با حافظه استفاده کرده است.

هسته لینوکس 5.12 که در حال توسعه است، شامل پیاده‌سازی مکانیزم KFence (حصار الکتریکی هسته) است که مدیریت حافظه، گرفتن بیش از حد بافر، دسترسی‌های حافظه پس از آزادسازی و سایر خطاهای کلاس مشابه را بررسی می‌کند.

عملکرد مشابه قبلاً در کرنل به شکل گزینه ساخت KASAN وجود داشت (ضدعفونی کننده آدرس هسته، از Address Sanitizer در gcc مدرن استفاده می کند) - با این حال، عمدتاً برای استفاده در اشکال زدایی قرار گرفته بود. تفاوت زیرسیستم KFence با KASAN در سرعت عملکرد بالا که امکان استفاده از این ویژگی را حتی بر روی هسته ها در سیستم های کاری فراهم می کند.

استفاده از سیستم های تولیدی، تشخیص خطاهای حافظه ای را که در اجرای آزمایشی ظاهر نمی شوند و فقط در طول بار کاری یا در حین عملیات طولانی مدت (با زمان کار زیاد) ظاهر می شوند، ممکن می سازد. علاوه بر این، استفاده از KFence در سیستم‌های تولید، افزایش چشمگیری تعداد ماشین‌های درگیر در بررسی عملکرد هسته با حافظه را ممکن می‌سازد.

KFence با قرار دادن صفحات محافظ در پشته در فواصل ثابت حداقل سربار مستقل از بار را به دست می آورد. پس از انقضای بازه حفاظتی بعدی، KFence، از طریق سیستم تخصیص حافظه استاندارد (تخصیص دهنده SLAB یا SLUB)، صفحه حفاظتی بعدی را از مخزن شی KFence اضافه می کند و گزارش شمارنده زمان جدیدی را شروع می کند. هر شی KFence در یک صفحه حافظه جداگانه قرار دارد و صفحات حافظه در امتداد مرزهای چپ و راست صفحات نگهبانی را تشکیل می دهند که اندازه آنها به طور تصادفی انتخاب می شود.

بنابراین، صفحات دارای اشیاء توسط صفحات حفاظتی از یکدیگر جدا می شوند، که برای ایجاد "عیب صفحه" در هر گونه دسترسی پیکربندی شده اند. برای تشخیص نوشته‌های خارج از مرز در صفحات شیء، از "مناطق قرمز" مبتنی بر الگو نیز استفاده می‌شود، که حافظه‌ای را اشغال می‌کند که توسط اشیا استفاده نمی‌شود و زمانی که اندازه صفحات حافظه تراز می‌شوند باقی می‌مانند. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | ب: | xxxxxxxxx | :B | xxxxxxxxx | | x نگهبان x | J : RED- | x نگهبان x | قرمز- : J | x نگهبان x | | xxxxxxxxx | E: ZONE | xxxxxxxxx | منطقه: E | xxxxxxxxx | | xxxxxxxxx | ج: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | ت: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

اگر تلاشی برای دسترسی به یک منطقه خارج از مرزهای بافر انجام شود، این عملیات صفحه حفاظت را تحت تأثیر قرار می دهد، که منجر به ایجاد یک "عیب صفحه" می شود، که KFence را رهگیری می کند و اطلاعات مربوط به مشکل شناسایی شده را ثبت می کند. به طور پیش فرض، KFence یک خطا را مسدود نمی کند و فقط یک هشدار را در گزارش نمایش می دهد، اما یک تنظیم "panic_on_warn" وجود دارد که به شما امکان می دهد در صورت تشخیص خطا، هسته را در حالت وحشت قرار دهید.

منبع: opennet.ru

اضافه کردن نظر