در آخرین بهروزرسانیهای هسته لینوکس (Linux kernel)، یک آسیبپذیری امنیتی در بخش مدیریت درایورهای NVMe شناسایی و برطرف شده است. این مشکل مربوط به دسترسیهای همزمان و ناپایدار به آرایه شناسههای جایگذاری FDP است.
تحلیل فنی مشکل
بررسیها نشان میدهد که تابع nvme_query_fdp_info() به ازای هر مسیر (per-path) فراخوانی میشود و به همین دلیل در معرض Race Condition قرار دارد. این تابع وظیفه مقداردهی به head->nr_plids و head->plids را برای ثبت FDP بر عهده دارد، اما هیچ مکانیزمی برای محافظت از این جفت متغیر در برابر دسترسیهای همزمان (Concurrent Access) وجود نداشت.
سناریوی حمله و اثرات
در شرایطی که دو مسیر مختلف در حال اسکن یک Namespace مشترک باشند، رقابتی برای مقداردهی اولیه این متغیرها ایجاد میشد. این وضعیت میتواند منجر به ناپایداری سیستم یا رفتارهای پیشبینینشده در لایه مدیریت حافظه و ذخیرهسازی شود.
راهکار اصلاحی
برای رفع این مشکل، عملیات مقداردهی اولیه از تابع nvme_query_fdp_info() حذف شده و به تابع nvme_alloc_ns_head() منتقل شده است. از آنجایی که تابع جدید تنها یکبار به ازای هر Namespace مشترک فراخوانی میشود، احتمال وقوع Race Condition بهطور کامل از بین رفته است.