در آخرین بهروزرسانیهای هسته لینوکس (Linux kernel)، یک آسیبپذیری در بخش nvme-rdma شناسایی و برطرف شده است. این مشکل مربوط به ترتیب اجرای عملیات پاکسازی (Cleanup) در مسیر queue_rq هنگام بروز خطای -EIO بود.
تحلیل فنی مشکل
در شرایطی که خطای -EIO رخ میداد، مسیر RDMA queue_rq ابتدا یک خطای مسیر میزبان (Host Path Error) را گزارش میکرد و سپس اقدام به پاکسازی دستور (Command Cleanup) و حذف نگاشت DMA برای SQE مینمود. از آنجایی که تابع کمکی گزارش خطا، درخواست را به طور کامل تکمیل میکرد، این روند منجر به Double Cleanup و اجرای عملیات Unmap برای DMA پس از تکمیل درخواست میشد.
راهکار اصلاحی
برای رفع این نقص، ترتیب عملیات تغییر یافته است تا ابتدا SQE حذف نگاشت (Unmap) شود و سپس خطای مسیر میزبان گزارش گردد. همچنین، عملیات پاکسازی بیرونی دستور در این مسیر خاص نادیده گرفته میشود تا از تداخل در مدیریت حافظه جلوگیری شود.