
یک وصله (Patch) پیشنهادی برای حذف پشتیبانی BSD-Compress از کد پروتکل نقطهبهنقطه (Point-to-Point Protocol یا PPP) در هسته لینوکس (Linux Kernel) ارائه شده است. این قابلیت که با گزینه پیکربندی CONFIG_PPP_BSDCOMP فعال میشد، به گفته توسعهدهنده لینوکس، چینگفانگ دنگ (Qingfang Deng)، اکنون به عنوان یک میراث قدیمی و بدون نگهدارنده ارزیابی میشود و خطای کشندهای در کد رمزگشا (Decoder) آن وجود دارد.
علت فنی پیشنهاد حذف چیست؟
در توضیح فنی آمده است که رمزگشای BSD-Compress فرض میکند accm یک مقدار ۳۲ بیتی است، اما آن را به صورت unsigned long تعریف میکند. در سیستمهای ۶۴ بیتی، بیتهای مصرفشده کد پس از شیفت چپ (Left Shift) باقی میمانند و کد بعدی را خراب میکنند. یک آزمون حلقهای (Loopback) روی x86-64 با PPP-over-PTY این خطای کشنده «bad-code» را در نخستین بسته فشرده بازتولید کرده است.
پیامد برای pppd و کاربران
بر اساس متن منبع، pppd معمولاً وقتی هر دو روش قابل مذاکره باشند، Deflate را به BSD-Compress ترجیح میدهد. اگر BSD-Compress انتخاب شود و به این خطای کشنده برسد، pppd فشردهسازی را غیرفعال میکند و پیام «Lost compression sync: disabling compression» را ثبت میکند. در این حالت لینک فعال میماند و ترافیک میتواند به صورت غیرفشرده ادامه یابد.
سابقه کد و وضعیت بررسی وصله
روال اصلی فشردهسازی از لینوکس 2.1.67 (سال ۱۹۹۷) و روال رمزگشایی از زمان معرفی آن در لینوکس 1.3.33 (سال ۱۹۹۵) بدون تغییر مانده است. تغییرات بعدی بیشتر شامل یکپارچهسازی ماژول، مدیریت چرخه عمر، APIهای هسته، سختسازی تخصیص حافظه، فراداده و سازماندهی کد بوده و عرض انباشتگر رمزگشا را اصلاح نکرده است.
همچنین مشکل مرتبطی در سال ۲۰۲۴ گزارش شده بود که در بررسیها استفاده از unsigned int پیشنهاد شد، اما رمزگشا همچنان از unsigned long استفاده میکند. در متن منبع تأکید شده که درایورهای پروتکل PPP و فشردهسازها در هسته لینوکس بدون نگهدارنده (Orphaned) هستند. وصله حذف این قابلیت اکنون در فهرست پستی netdev برای بررسی در انتظار است.