CVE-2025-39863 in Linuxinformação

Sumário

de VulDB • 24/05/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

wifi: brcmfmac: corrige uso-após-liberação (use-after-free) ao reagendar o trabalho brcmf_btcoex_info

A função brcmf_btcoex_detach() desliga apenas o timer btcoex se a flag timer_on for falsa. No entanto, a função brcmf_btcoex_timerfunc(), que atua como manipulador do timer, define timer_on como falsa. Isso cria condições de corrida críticas:

1. Se brcmf_btcoex_detach() for chamada enquanto brcmf_btcoex_timerfunc() estiver em execução, ela pode observar timer_on como falsa e pular a chamada para timer_shutdown_sync().

2. A função brcmf_btcoex_timerfunc() pode então reagendar o worker brcmf_btcoex_info após o cancel_work_sync() ter sido executado, resultando em bugs de uso-após-liberação (use-after-free).

Os bugs de uso-após-liberação ocorrem em dois cenários distintos, dependendo do momento em que a estrutura brcmf_btcoex_info é liberada em relação à execução de sua thread de trabalho.

Cenário 1: Liberado antes que o worker seja agendado

A estrutura brcmf_btcoex_info é desalocada antes que o worker seja agendado. Uma condição de corrida pode ocorrer quando schedule_work(&bt_local->work) é chamada após a memória alvo ter sido liberada. A sequência de eventos é detalhada abaixo:

CPU0 | CPU1 brcmf_btcoex_detach | brcmf_btcoex_timerfunc | bt_local->timer_on = false; if (cfg->btcoex->timer_on) | ... | cancel_work_sync(); | ... | kfree(cfg->btcoex); // LIBERA | | schedule_work(&bt_local->work); // USO

Cenário 2: Liberado após o worker ser agendado

A estrutura brcmf_btcoex_info é liberada após o worker ter sido agendado, mas antes ou durante sua execução. Neste caso, instruções dentro de brcmf_btcoex_handler() — como a macro container_of e as subsequentes desreferências do objeto brcmf_btcoex_info — causarão um acesso de uso-após-liberação. A seguinte linha do tempo ilustra este cenário:

CPU0 | CPU1 brcmf_btcoex_detach | brcmf_btcoex_timerfunc | bt_local->timer_on = false; if (cfg->btcoex->timer_on) | ... | cancel_work_sync(); | ... | schedule_work(); // Reagendar | kfree(cfg->btcoex); // LIBERA | brcmf_btcoex_handler() // Worker /* | btci = container_of(....); // USO O kfree() acima poderia | ... também ocorrer a qualquer | btci-> // USO ponto durante a execução do | worker | */ |

Para resolver as condições de corrida, remova a verificação condicional e chame timer_shutdown_sync() diretamente. Ela pode desativar o timer de forma confiável, independentemente de seu estado atual. Uma vez parado, o estado timer_on é então definido como falso.

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

Responsável

Linux

Reservar

16/04/2025

Divulgação

19/09/2025

Moderação

aceite

Entrada

VDB-325057

CPE

pronto

EPSS

0.00158

KEV

não

Atividades

muito baixo

Fontes

Want to know what is going to be exploited?

We predict KEV entries!