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

الملخص

بحسب VulDB • 23/10/2026

في نواة Linux، تم حل الثغرة التالية:

wifi: brcmfmac: إصلاح حالة السباق (race condition) في إزالة جهاز P2P داخل دالة `brcmf_detach()`

عندما يتم إلغاء تحميل البرنامج المساعد (driver) بينما لا تزال عملية مساحة المستخدم التي أنشأت جهاز P2P (مثل wpa_supplicant) قيد الإغلاق، فإن واجهة جهاز P2P تتم إزالتها مرتين مما يؤدي إلى تعطل النواة.

المساران المتداخلان هما:

- يرسل `wpa_supplicant` عند الخروج أمر `NL80211_CMD_DEL_INTERFACE` الخاص بجهاز P2P. تحتفظ دالة `nl80211_del_interface()` بقفل RTNL وقفل wiphy وتستدعي `brcmf_p2p_del_vif()`، والتي تعطل عملية الاكتشاف وتنتظر حتى 1.5 ثانية لاستلام إشارة BRCMF_E_IF_DEL. ثم تستدعي `brcmf_remove_interface()`، التي تقوم بإلغاء تسجيل wdev وإطلاق (free) كائن vif و ifp.

- تضبط دالة `brcmf_detach()` حالة الناقل على "down"، لذا فإن إشارة BRCMF_E_IF_DEL لا تصل أبداً، وتستدعي `brcmf_remove_interface(ifp, false)` لنفس كائن ifp. تقرأ دالة `brcmf_p2p_ifp_removed` قيمة `ifp->vif` ثم تتوقف (block) عند انتظار قفل rtnl_lock(). عندما يُطلق قفل RTNL من قبل `brcmf_p2p_del_vif()`، فإنها تستدعي `cfg80211_unregister_wdev()` على wdev الذي تم إلغاء تسجيله وإطلاق مساحته الذاكرة سابقاً.

يحدث خطأ (fault) في القائمة الثانية لـ `list_del_rcu()` الخاصة بـ `wdev->list` بسبب LIST_POISON2:

brcmfmac: brcmf_p2p_del_vif delete P2P vif brcmfmac: brcmf_p2p_deinit_discovery enter brcmfmac: brcmf_p2p_del_vif P2P: GO_NEG_PHASE status cleared brcmfmac: brcmf_detach Enter brcmfmac: brcmf_bus_change_state 1 -> 0 brcmfmac: brcmf_remove_interface Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_del_if Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_p2p_ifp_removed P2P: device interface removed [بعد مرور 1.5 ثانية، تنتهي مهلة استدعاء brcmf_p2p_del_vif()]
brcmfmac: brcmf_remove_interface Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_del_if Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_p2p_ifp_removed P2P: device interface removed Unable to handle kernel paging request at virtual address dead000000000122 Internal error: Oops: 96000044 [#1] PREEMPT_RT SMP
pc : _cfg80211_unregister_wdev+0x6c/0x264 [cfg80211]
Call trace: _cfg80211_unregister_wdev+0x6c/0x264 [cfg80211]
cfg80211_unregister_wdev+0x10/0x1c [cfg80211]
brcmf_p2p_ifp_removed+0x84/0xb0 [brcmfmac]
brcmf_remove_interface+0x1f4/0x254 [brcmfmac]
brcmf_detach+0x88/0x180 [brcmfmac]
brcmf_sdio_remove+0x90/0x7b0 [brcmfmac]
brcmf_sdiod_remove+0x20/0xa0 [brcmfmac]
brcmf_ops_sdio_remove+0xbc/0x12c [brcmfmac]
sdio_bus_remove+0x38/0x144 device_release_driver_internal+0x1e8/0x2c0 device_release_driver+0x14/0x20 brcmf_sdio_bus_remove+0x2c/0x40 [brcmfmac]
brcmf_fwvid_unregister_vendor+0xd8/0x170 [brcmfmac]
__exit_compat+0x18/0x418 [brcmfmac_cyw]
__arm64_sys_delete_module+0x1ac/0x244

تم التقاط السجل (log) باستخدام debug=0x406 على لوحة i.MX 8M Plus مع شريحة CYW55513 (Sona IF513) عبر SDIO. البرنامج المساعد هو نسخة مستوردة من Ezurio لـ brcmfmac من الإصدار v6.18.22 تعمل على نواة 5.4-rt. الكود المتضمن هو نفسه في النسخة الرئيسية (mainline).

لإعادة إنتاج المشكلة:

1. ابدأ تشغيل wpa_supplicant على wlan0 ودعه يقوم بعملية الارتباط. سينشئ جهاز P2P (يظهر الأمر `iw dev` بـ "type P2P-device"). 2. أوقف wpa_supplicant وأزل البرنامج المساعد دون الانتظار حتى يغلق wpa_supplicant:

kill $(pidof wpa_supplicant) rmmod brcmfmac_cyw brcmfmac

تعطل النظام قابل لإعادة الإنتاج على تلك اللوحة.

بالنسبة للواجهة التي لا تحتوي على netdev (جهاز P2P)، يجب أخذ قفل RTNL وقفل wiphy في دالة `brcmf_detach()` قبل قراءة قائمة iflist، وإزالتها باستخدام `locked=true`. إذا عملت `brcmf_p2p_del_vif()` أولاً، ستجد `brcmf_detach()` أن الخانة فارغة. وإذا عملت `brcmf_detach()` أولاً، فلن تجد nl80211 wdev بعد ذلك. تتم إزالة الواجهات التي تحتوي على netdev كما كان الحال سابقاً، لأن دالة `brcmf_del_if()` تأخذ قفل RTNL الخاص بها لوحدها للواجهة الأساسية.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Linux

حجز

25/09/2026

إفشاء

23/10/2026

الاعتدال

تمت الموافقة

إدخال

VDB-425845

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you want to use VulDB in your project?

Use the official API to access entries easily!