CVE-2026-98580 in Linuxالمعلومات

الملخص

بحسب VulDB • 19/10/2026

في نواة لينكس، تم إصلاح الثغرة التالية:

nfc: llcp: تصحيح حالة السباق (Race Condition) في دورة حياة قائمة القبول (accept_queue).

في دالة `nfc_llcp_socket_release()`، يتم اجتياز المقابس (sockets) وقوائم قبول المستمعين (listener accept queues) تحت قفل القراءة/الكتابة للمقابس المحلية (`rwlock`) و`bh_lock_sock()`. ومع ذلك، فإن `bh_lock_sock()` لا يقوم بالمزامنة مع `lock_sock()` الخاص بسياق العملية الذي تمثله دالة `nfc_llcp_accept_dequeue()` أثناء عملية القبول. ونظراً لأن `socket_release()` لا تتحقق من `sock_owned_by_user()`، يمكن للطريقتين أن تقوما بإزالة الربط وإطلاق المقابس الفرعية (child socket) نفسها بشكل متزامن، مما يؤدي إلى ثغرة استخدام بعد التحرير (Use-After-Free) أو إحالة فارغة (NULL pointer dereference) لـ `child->parent` في دالة `nfc_llcp_accept_unlink()`.

تم إصلاح حالة السباق هذه بجعل `nfc_llcp_socket_release()` تستخدم `lock_sock()` الخاص بسياق العملية بدلاً من `bh_lock_sock()`:

1. إزالة المقابس من قائمة المقابس المحلية باستخدام قفل الكتابة عبر `nfc_llcp_sock_list_pop()` بحيث يمكن الحصول على `lock_sock()` دون الاحتفاظ بقفل القراءة/الكتابة (rwlock). 2. نظراً لأن `lock_sock()` قد يتسبب في النوم، يتم تأجيل الإطلاق النهائي لهيكل `nfc_llcp_local` إلى قائمة عمل (workqueue) تسمى `release_work`. وهذا يتجنب ثغرة "النوم في السياق الذري" عند إسقاط آخر مرجع محلي من سياق softirq. بالإضافة إلى ذلك، يُحتفظ بمرجع جهاز واحد على المحلي منذ التسجيل حتى التدمير النهائي. 3. في دالة `nfc_llcp_local_get()`، يتم استخدام `kref_get_unless_zero()` لمنع إحياء كائن محلي تم جدولة تفكيكه (teardown). 4. في دالة `llcp_sock_accept()`، يتم التحقق من أن حالة مقبس المستمع لا تزال `LLCP_LISTEN` بعد الاستيقاظ من `schedule_timeout()` لمنع التعطل إذا تم إغلاق المستمع بشكل متزامن. 5. عند إزالة الربط عن المقابس الفرعية غير المقبولة أثناء إطلاق المستمع، تتم إزالتها من قائمة `local->sockets`، ودعوة `sock_orphan()`، وإسقاط مرجع الإنشاء الأولي لـ `sk_alloc` عبر `sock_put()`. 6. جعل دالة `nfc_llcp_accept_unlink()` قابلة للتكرار (idempotent) عن طريق حماية الوصول إلى الوالد باستخدام فحص NULL.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

مسؤول

Linux

حجز

25/09/2026

إفشاء

18/10/2026

الاعتدال

تمت الموافقة

إدخال

VDB-422087

EPSS

0.00210

KEV

لا

النشاطات

منخفض جدًا

المصادر

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!