ICP·Devآی‌سی‌پی‌·دِو
بازگشت به مقالات
راست۵ تیر ۱۴۰۵2 دقیقه مطالعه

پایان کرش‌های هسته: نگاهی به انقلاب پیشنهادی «سرریز عدد صحیح قابل بازیابی» در راست

پیش‌نویس جدید یک طرح پیشنهادی کامپایلر (RFC)، مفهوم «سرریزهای عدد صحیح قابل بازیابی» را در زبان راست معرفی می‌کند. این نوآوری به هسته سیستم‌عامل‌ها و نرم‌افزارهای حساس اجازه می‌دهد تا سرریزهای عددی را در زمان اجرا شناسایی کرده و بدون کرش کردن کامل سیستم، آن‌ها را مدیریت کنند.

نکات کلیدی

  • پیش‌نویس جدید یک طرح پیشنهادی کامپایلر (RFC)، مفهوم «سرریزهای عدد صحیح قابل بازیابی» را در زبان راست معرفی می‌کند
  • این نوآوری به هسته سیستم‌عامل‌ها و نرم‌افزارهای حساس اجازه می‌دهد تا سرریزهای عددی را در زمان اجرا شناسایی کرده و بدون کرش کردن کامل سیستم، آن‌ها را مدیریت کنند
اشتراک‌گذاری
پایان کرش‌های هسته: نگاهی به انقلاب پیشنهادی «سرریز عدد صحیح قابل بازیابی» در راست

پایان کرش‌های هسته: نگاهی به انقلاب پیشنهادی «سرریز عدد صحیح قابل بازیابی» در راست

سرریز عدد صحیح یکی از قدیمی‌ترین و فریبنده‌ترین باگ‌ها در برنامه‌نویسی سیستم است. در زبان‌های C و C++، سرریز عدد صحیح علامت‌دار به‌طور بدنامی به عنوان «رفتار تعریف‌نشده» (Undefined Behavior) در نظر گرفته می‌شود که بهینه‌سازهای کامپایلر می‌توانند به روش‌های خطرناک و غیرقابل‌پیش‌بینی از آن سوءاستفاده کنند. زبان راست از نظر تاریخی این مشکل را با تقسیم رفتار خود حل کرده است: در حالت دیباگ (debug mode)، سرریزها یک panic! ایمن اما خشن را ایجاد می‌کنند، در حالی که در حالت انتشار (release mode)، آن‌ها عملیات پیمانه استاندارد (two's complement wrapping) را انجام می‌دهند.

با این حال، برای توسعه‌دهندگانی که روی سیستم‌های سطح پایین مانند هسته لینوکس کار می‌کنند، این انتخاب دوگانه یک کابوس است. بروز یک کرش هسته (Kernel panic) ناشی از یک سرریز عدد صحیح ساده در یک درایور غیراصلی می‌تواند یک سرور ابری کامل را از کار بیندازد. در مقابل، سرریز بی‌صدا در نسخه نهایی محصول می‌تواند منجر به فساد حافظه پنهان یا سوءاستفاده‌های امنیتی شود.

اکنون، یک پیشرفت بزرگ در راه است. پیش‌نویس جدیدی از یک پول ریکوئست کامپایلر که توسط یکی از مشارکت‌کنندگان به نام یانا دونسلمان (Jana Dönszelmann) ارسال شده، راه سومی را معرفی می‌کند: سرریزهای عدد صحیح قابل بازیابی.

جادوی -Coverflow-checks=recoverable

در قلب این ویژگی پیشنهادی، یک پرچم جدید کامپایلر به نام -Coverflow-checks=recoverable به همراه یک ماکروی ویژگی اختصاصی قرار دارد: #[core::panic::integer_overflow_action].

کامپایلر اکنون می‌تواند به جای لغو اجباری اجرای برنامه (unwind) یا اجازه دادن به سرریز بی‌صدا، سرریزهای عددی زمان اجرا را به یک مدیریت‌کننده (handler) سفارشی تعریف‌شده توسط کاربر هدایت کند. این امر به نرم‌افزارهای سیستم دقیقاً همان ابزاری را می‌دهد که برای بازیابی ایمن و بی‌دردسر به آن نیاز دارند.

یک فلوچارت فنی دقیق که سیستم جدید راست را نشان می‌دهد...

در زیر پوست، این کد انقلابی با استفاده از ویژگی جدید پیشنهادی recoverable_integer_overflow به این شکل است:

rust
#![feature(recoverable_integer_overflow)]
#![allow(arithmetic_overflow, unused)]

// تعیین اکشن سفارشی برای اجرا در زمان رخ دادن سرریز
#[core::panic::integer_overflow_action]
fn handle_overflow() {
    println!("Warning: Numerical overflow detected! Kernel status: Tainted.");
}

fn main() {
    let mut x: u8 = 255;
    x += 1; // در حالت عادی پانیک یا سرریز بی‌صدا رخ می‌دهد. اکنون، هندلر ما را فرامی‌خواند!
}

تحولی بزرگ برای پروژه راست در لینوکس (Rust-for-Linux)

این ویژگی به شدت توسط تیم Rust-for-Linux درخواست شده بود. در هسته سیستم‌عامل‌ها، پایداری حرف اول را می‌زند. کاربرد اصلی این هوک (hook) در سمت لینوکس، ثبت یک هشدار بحرانی هسته (WARN_ON) هنگام رخ دادن سرریز است — برای مثال، نشانه‌گذاری هسته به عنوان «آلوده» (tainted) برای گزارش باگ — و سپس اجازه دادن به سیستم برای ادامه کار به جای کرش کردن کل ماشین.

با شناسایی سرریزها در زمان اجرا و هدایت آن‌ها به مسیرهای محلی بازیابی خطا، زبان راست در حال تثبیت جایگاه خود برای حذف کامل یک دسته کامل از آسیب‌پذیری‌های با شدت بالا در هسته است. اگرچه این طرح در حال حاضر در مرحله پیش‌نویس پول ریکوئست قرار دارد، اما هیجان جامعه برنامه‌نویسی سیستم نشان می‌دهد که پس از پایدار شدن، به سرعت به پیکربندی پیش‌فرض برای محیط‌های حساس به ایمنی و سیستم‌های بدون واسطه (bare-metal) در سراسر جهان تبدیل خواهد شد.

برچسب‌ها

#راست#برنامه‌نویسی سیستم#لینوکس#کامپایلر#مدیریت خطا

منابع و ارجاعات مستند

پیشنهاد مطالعه بعدی

خوشتان آمد؟ مقاله بعدی را بگیرید

در خبرنامه عضو شوید تا راهنمای بعدی در ایمیلتان باشد — بدون مزاحمت، لغو عضویت در هر زمان.