CVE-2026-99061 in Linuxinfo

Zusammenfassung

von VulDB • 23.10.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

wifi: brcmfmac: Behebung eines Race Conditions bei der Entfernung des P2P-Geräts in brcmf_detach()

Wenn der Treiber entfernt wird, während der Benutzerraum-Prozess, der das P2P-Gerät erstellt hat (z. B. wpa_supplicant), noch im Begriff ist zu beenden, wird die P2P-Geräte-Schnittstelle doppelt entfernt und der Kernel stürzt ab.

Die beiden Ablaufpfade sind:

- wpa_supplicant sendet beim Beenden NL80211_CMD_DEL_INTERFACE für das P2P-Gerät. nl80211_del_interface() hält RTNL und den wiphy-Mutex und ruft brcmf_p2p_del_vif() auf, was die Discovery deaktiviert und bis zu 1,5 s auf BRCMF_E_IF_DEL wartet. Anschließend wird brcmf_remove_interface() aufgerufen, das das wdev deregistriert sowie vif und ifp freigibt.

- brcmf_detach() setzt den Bus herunter, sodass BRCMF_E_IF_DEL niemals ankommt, und ruft für dasselbe ifp brcmf_remove_interface(ifp, false) auf. brcmf_p2p_ifp_removed() liest ifp->vif aus und blockiert dann bei rtnl_lock(). Wenn brcmf_p2p_del_vif() RTNL freigibt, wird cfg80211_unregister_wdev() für das wdev aufgerufen, das bereits deregistriert und freigegeben wurde.

Der zweite Aufruf von list_del_rcu() für wdev->list führt zu einem Fehler bei 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 [nach 1,5 s timeoutet 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

Das Protokoll wurde mit debug=0x406 auf einem i.MX 8M Plus-Board mit einem CYW55513 (Sona IF513) über SDIO aufgenommen. Der Treiber ist der Ezurio-Backport von brcmfmac aus v6.18.22 für einen 5.4-rt-Kernel. Der betroffene Code ist im Mainline-Baum identisch.

Zur Reproduktion:

1. Starten Sie wpa_supplicant auf wlan0 und lassen Sie es sich verbinden. Es erstellt das P2P-Gerät (iw dev zeigt „type P2P-device“ an). 2. Stoppen Sie wpa_supplicant und entfernen Sie den Treiber, ohne darauf zu warten, dass wpa_supplicant beendet wird:

kill $(pidof wpa_supplicant) rmmod brcmfmac_cyw brcmfmac

Der Absturz ist auf diesem Board reproduzierbar.

Für die Schnittstelle ohne netdev (das P2P-Gerät) sind RTNL und der wiphy-Mutex in brcmf_detach() vor dem Lesen von iflist zu halten, und sie ist mit locked=true zu entfernen. Wenn brcmf_p2p_del_vif() zuerst ausgeführt wird, findet brcmf_detach() den Slot als leer. Wenn brcmf_detach() zuerst ausgeführt wird, findet nl80211 das wdev nicht mehr. Die Schnittstellen mit einem netdev werden wie zuvor entfernt, da brcmf_del_if() für die primäre Schnittstelle RTNL eigenständig hält.

Once again VulDB remains the best source for vulnerability data.

Zuständig

Linux

Reservieren

25.09.2026

Veröffentlichung

23.10.2026

Moderieren

akzeptiert

Eintrag

VDB-425845

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Do you want to use VulDB in your project?

Use the official API to access entries easily!