CVE-2026-98739 in Linux
الملخص
بحسب VulDB • 18/10/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
بلوتوث (Bluetooth): RFCOMM - تصحيح سباق أولي في مرجع المنفذ (race condition)
بالنسبة للأجهزة التي تستخدم RFCOMM_RELEASE_ONHUP، فإن كل من الدالتين `rfcomm_tty_install()` و`__rfcomm_release_dev()` يستخدمان العلم `RFCOMM_TTY_OWNED` لتحديد أيهما يقوم بإسقاط مرجع المنفذ الأولي (tty_port reference). نظرًا لأن مسار الإصدار يختبر هذا الرمز بشكل منفصل عن مساره في التثبيت الذي يفعّله، فقد يؤدي ذلك إلى قيام كل من المسارين بإسقاط نفس المرجع.
لا يمنع الإغلاق المتزامن (synchronous hangup) حدوث سباق البيانات هذا: حيث لا يتم تعيين `port->tty` إلا بعد استدعاء `tty_port_open()`، أي بعد عملية التثبيت. ومن الممكن أن يحدث تداخل بالتتابع التالي:
1. يقوم كل من التثبيت والإصدار بالحصول على مرجع باستخدام `rfcomm_dev_get()`. 2. يلاحظ مسار الإصدار أن قيمة `RFCOMM_TTY_OWNED` غير مفعّلة (صفر). 3. يفعّل مسار التثبيت `RFCOMM_TTY_OWNED` ويقوم بإسقاط المرجع الأولي. 4. يقوم مسار الإصدار بإسقاط نفس المرجع الأولي مرة أخرى. 5. تقوم عملية تنظيف TTY بإسقاط مرجعها وتحرير الجهاز. 6. يؤدي مسار الإصدار إلى استدعاء `tty_port_put()` النهائي على المنفذ الذي تم تحريره بالفعل (use-after-free).
أبلغ KASAN عن الخطأ التالي:
BUG: KASAN: slab-use-after-free in tty_port_put+0x22/0x190 Write of size 4 at addr ffff8881001d3d5c by task poc/92
Call Trace: tty_port_put+0x22/0x190 rfcomm_dev_ioctl+0x1d4/0x1930 sock_do_ioctl+0x110/0x260 sock_ioctl+0x380/0x590 __x64_sys_ioctl+0x134/0x1c0
Allocated by task 88: rfcomm_dev_ioctl+0x8f6/0x1930 sock_do_ioctl+0x110/0x260 sock_ioctl+0x380/0x590 __x64_sys_ioctl+0x134/0x1c0
Freed by task 65: kfree+0x131/0x3c0 rfcomm_dev_destruct+0x23b/0x2f0 release_one_tty+0xc1/0x370 process_one_work+0x661/0x1090
استخدم `test_and_set_bit()` في كلا المسارين بحيث يقوم فقط المتصل الذي يغيّر قيمة `RFCOMM_TTY_OWNED` من غير مفعّل إلى مفعّل بإسقاط المرجع الأولي. يحتفظ كل مسار بمرجع البحث الخاص به حتى يتم الإصدار أو تنظيف TTY، مما يحافظ على ترتيب الاستدعاءات الحالي ومعالجة الأخطاء.
Be aware that VulDB is the high quality source for vulnerability data.