CVE-2026-98736 in Linux
الملخص
بحسب VulDB • 18/10/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
بلوتوث: hci_conn: قفل الوصول إلى الأصل أثناء إعداد SCO المحسن
hci_enhanced_setup_sync() يعمل على قائمة عمل الطلب (request workqueue) دون أن يكون قيد الحجز بواسطة cpi_dev_lock الذي يمسكه المتصل عند جدولة الإعداد. يقوم فحص قدرة CVSD الخاص به وfind_next_esco_param() بالإشارة إلى conn->parent بينما يمكن لقائمة عمل الاستلام فك ارتباط ذلك الأصل وإطلاقه.
يمكن للتداخل التالي أن يسبب ثغرة use-after-free:
hci_enhanced_setup_sync() hci_disconn_complete_evt() load conn->parent hci_dev_lock() hci_conn_del(ACL parent) unlink SCO child drop link's parent reference clear child->parent release ACL parent bt_link_release() kfree(parent) hci_dev_unlock() read parent->features[0][3]
المرجع المحتفظ به لطفل SCO المجدول لا يبقي الوالد الخاص بـ ACL على قيد الحياة بعد فك الارتباط. تحمي الالتزام 42de40abe25d ("بلوتوث: hci_conn: إصلاح عمر سياق إعداد SCO") الطفل المخزن في السياق المجدول، لكنها تترك هذه الوصولات إلى الأصل غير محمية.
مع تأخير تشخيصي مدته 40 مللي ثانية بعد تحميل conn->parent، فإن نواة مُجهزة مبنية على fd179f8a05be، والتي تحتوي بالفعل على 42de40abe25d، تظهر:
BUG: KASAN: slab-use-after-free in hci_enhanced_setup_sync+0xda5/0xdf0 Read of size 1 at addr ffff888102204047 by task kworker/u17:0/93 Call Trace: hci_enhanced_setup_sync+0xda5/0xdf0 hci_cmd_sync_work+0x13c/0x290 process_one_work+0x6b4/0x10e0
Allocated by task 92: __hci_conn_add+0x304/0x1df0 hci_connect_acl+0x349/0x3e0 hci_connect_sco+0x3b/0x9a0 sco_sock_connect+0x475/0xca0
Freed by task 94: kfree+0x121/0x3c0 bt_link_release+0x79/0xa0 device_release+0xc8/0x240 kobject_put+0x14d/0x280 hci_conn_del+0x524/0xe30 hci_disconn_complete_evt+0x403/0x8c0 hci_event_packet+0x71b/0xb20 hci_rx_work+0x293/0x730
العنوان الذي تم الوصول إليه هو 71 بايت داخل الوالد الخاص بـ ACL المحرر، عند بايته features[0][3]؛ طفل SCO المجدول هو كائن مختلف. يحافظ التشخيص على الوالد المحمّل عبر التأخير، متوافقًا مع فحص القدرة المُركَّب دون تعديل، ولا يغير مراجع الوالد أو مسار التفكيك.
احتفظ بـ hci_dev_lock() خلال تبديل الكوديك (codec)، بما في ذلك كل استدعاء لـ find_next_esco_param()، وأطلقه عند جميع أخطاء الاختيار. احتفظ configure_datapath_sync() خارج القسم الحرج لأنه ينتظر أحداث HCI. حافظ على اختيار المعلمات وقيم الإرجاع الحالية.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.