
ویژگی جدیدی که هفته گذشته برای هسته لینوکس ۷.۴ (Linux 7.4) ادغام شده بود تا نویز ناشی از گزارشهای نامعتبر و بیربط ابزارهای هوش مصنوعی و مدلهای زبانی بزرگ (LLM) را کاهش دهد، اکنون به دلیل وابستگی زیرسیستم VFIO به رفتار bind/unbind بازگردانده شده است. گرگ کرواه-هارتمن (Greg Kroah-Hartman) این وضعیت را «هیولای دیوانه» (Crazy Beast) توصیف کرده است.
ماجرای TAINT_FORCED_BIND چیست؟
گرگ کرواه-هارتمن در سپتامبر گزینهای به نام TAINT_FORCED_BIND را طراحی کرد تا در صورت استفاده از رابط sysfs مربوط به bind/unbind، هسته در حال اجرا علامتگذاری (taint) شود. این رابط به کاربران اجازه میدهد تا سختافزار را بهصورت دلخواه به یک درایور خاص متصل یا از آن جدا کنند. در عصر هوش مصنوعی و مدلهای زبانی بزرگ، این رابط توسط Syzbot و ابزارهای مشابه مورد سوءاستفاده قرار گرفت؛ آنها تلاش میکردند سختافزار را به درایورهایی متصل کنند که هیچ ارتباط منطقی با یکدیگر ندارند. نتیجه، تولید انبوهی از گزارشهای باگ بیربط بود که با هیچ سناریوی مشروع استفاده از هسته لینوکس مطابقت نداشت.
با فعال بودن TAINT_FORCED_BIND، توسعهدهندگان هسته میتوانستند در گزارشهای باگ بهسرعت تشخیص دهند که از رابط bind/unbind استفاده شده است و بنابراین احتمال نامعتبر بودن گزارش را بهتر ارزیابی کنند. این ویژگی هفته گذشته برای لینوکس ۷.۴ ادغام شد؛ اقدامی که گرگ کرواه-هارتمن آن را واکنشی به «حمله» گسترده اخیر فازینگ (Fuzzing) علیه هسته توصیف کرده بود.
چرا بازگردانده شد؟
اما تنها پس از ادغام TAINT_FORCED_BIND مشخص شد که کد VFIO در عمل مشروع به رفتار bind/unbind وابسته است. در وصله بازگردانی (Revert Patch)، گرگ کرواه-هارتمن نوشت: «معلوم شد که VFIO هیولای دیوانهای است و افراد بهعنوان راهی برای مدیریت عبور دستگاهها به نمونههای مهمان (Guest Instances) به ویژگی اشکالزدایی bind/unbind «تکیه» کردهاند.» به همین دلیل، این ویژگی فعلاً بازگردانده شد تا زمانی که راهحل مناسبتری پیدا شود که جریانهای کاری عادی را باعث taint هسته نکند.
VFIO برای جدا کردن دستگاههای PCIe از درایور میزبان لینوکس و متصل کردن آنها به vfio-pci جهت استفاده در ماشینهای مجازی (VM) به bind/unbind نیاز دارد. بازگردانی این ویژگی شب جمعه ادغام شد.
گزینه پیشنهادی برای آینده
اووه کلاینه-کونیگ (Uwe Kleine-König) پیشنهاد کرده است که از TAINT_DRIVER_OVERRIDE تنها هنگام استفاده از driver_override استفاده شود و driver_override بهصورت پیشفرض غیرفعال باشد، در حالی که درایورهای لینوکس بتوانند بهصورت اختیاری خود را در آن مجاز کنند. باید دید آیا این پیشنهاد برای لینوکس ۷.۵ پذیرفته میشود یا خیر؛ زیرا برای لینوکس ۷.۴ با توجه به بسته شدن قریبالوقوع پنجره ادغام (Merge Window) دیگر دیر است.