CVE-2026-99061 in Linuxinformación

Resumen

por VulDB • 2026-10-24

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

wifi: brcmfmac: corregir una condición de carrera (race condition) en la eliminación del dispositivo P2P dentro de brcmf_detach()

Cuando el controlador se elimina mientras el proceso del espacio de usuario que creó el dispositivo P2P (por ejemplo, wpa_supplicant) aún está saliendo, la interfaz del dispositivo P2P se elimina dos veces y el kernel falla.

Los dos flujos son:

- wpa_supplicant, al salir, envía NL80211_CMD_DEL_INTERFACE para el dispositivo P2P. nl80211_del_interface() mantiene RTNL y el mutex de wiphy y llama a brcmf_p2p_del_vif(), lo que desactiva la exploración (discovery) y espera hasta 1,5 s por BRCMF_E_IF_DEL. Luego llama a brcmf_remove_interface(), que registra como no disponible el wdev y libera vif e ifp.

- brcmf_detach() establece el bus en estado bajo ("down"), por lo que BRCMF_E_IF_DEL nunca llega, y llama a brcmf_remove_interface(ifp, false) para el mismo ifp. brcmf_p2p_ifp_removed() lee ifp->vif y luego se bloquea en rtnl_lock(). Cuando brcmf_p2p_del_vif() libera RTNL, llama cfg80211_unregister_wdev() sobre el wdev que ya había sido dado de baja (unregistered) y liberado.

La segunda llamada a list_del_rcu() para la lista de wdev provoca una falta en 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 s después, brcmf_p2p_del_vif() agota el tiempo de espera]
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

El registro (log) se tomó con debug=0x406 en una placa i.MX 8M Plus con un CYW55513 (Sona IF513) conectado por SDIO. El controlador es la versión retrotraída de Ezurio para brcmfmac desde v6.18.22 sobre un kernel 5.4-rt. El código implicado es el mismo en la rama principal (mainline).

Para reproducir:

1. Iniciar wpa_supplicant en wlan0 y permitir que se asocie. Esto crea el dispositivo P2P (iw dev muestra "type P2P-device"). 2. Detener wpa_supplicant y eliminar el controlador sin esperar a que wpa_supplicant termine:

kill $(pidof wpa_supplicant) rmmod brcmfmac_cyw brcmfmac

El fallo es reproducible en esa placa.

Para la interfaz sin un netdev (el dispositivo P2P), tomar RTNL y el mutex de wiphy dentro de brcmf_detach() antes de leer iflist, y eliminarla con locked=true. Si brcmf_p2p_del_vif() se ejecuta primero, brcmf_detach() encuentra la ranura vacía. Si brcmf_detach() se ejecuta primero, nl80211 ya no encuentra el wdev. Las interfaces que tienen un netdev se eliminan como antes, porque brcmf_del_if() toma RTNL por sí misma para la interfaz principal.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsable

Linux

Reservar

2026-09-25

Divulgación

2026-10-23

Moderación

aceptado

Artículo

VDB-425845

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Do you need the next level of professionalism?

Upgrade your account now!