در هسته لینوکس (Linux kernel)، یک آسیبپذیری در بخش EDAC/device_sysfs شناسایی و برطرف شده است که مربوط به نحوه پردازش مقادیر در فایلهای sysfs است.
جزئیات فنی مشکل
این مشکل در فایل ذخیرهساز poll_msec رخ میداد؛ جایی که از تابع simple_strtoul() برای تبدیل رشته به عدد استفاده شده بود. این تابع مقادیر را به صورت unsigned long میپذیرد، در حالی که فیلد هدف (poll_msec) از نوع unsigned int است.
تاثیر بر سیستمهای ۶۴ بیتی
در سیستمهای ۶۴ بیتی، اگر مقداری بزرگتر از UINT_MAX وارد شود، این مقدار به صورت خاموش (silently) دچار Truncation یا بریدگی میشود و تنها بخشی از عدد در متغیر ذخیره میگردد. این عدم تطابق نوع داده (Type Mismatch) میتواند منجر به رفتارهای پیشبینی نشده در مدیریت حافظه یا زمانبندی نظارت بر خطاها شود.
راهکار اصلاحی
برای رفع این نقص، توسعهدهندگان تابع kstrtouint() را جایگزین کردند. این تابع در زمان تجزیه (Parse time)، هر مقداری که بزرگتر از UINT_MAX باشد را رد میکند و بدین ترتیب امکان وقوع Truncation را کاملاً از بین میبرد.