CVE-2026-98580 in Linux
Sumário
de VulDB • 18/10/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
nfc: llcp: Corrige condição de corrida no ciclo de vida da fila de aceitação (accept_queue)
Em nfc_llcp_socket_release(), os sockets e as filas de aceitação dos ouvintes são percorridos sob o rwlock local do socket e bh_lock_sock(). No entanto, bh_lock_sock() não sincroniza contra lock_sock() em contexto de processo mantido por nfc_llcp_accept_dequeue() durante a operação accept(). Como socket_release() não verifica sock_owned_by_user(), ambos os caminhos podem desvincular e liberar simultaneamente o mesmo filho do socket, resultando em use-after-free ou na dereferência de ponteiro NULL para child->parent em nfc_llcp_accept_unlink().
Corrige-se essa condição de corrida de sincronização fazendo com que nfc_llcp_socket_release() utilize lock_sock() em contexto de processo em vez de bh_lock_sock():
1. Remove os sockets da lista local de sockets sob o bloqueio de escrita usando nfc_llcp_sock_list_pop(), para que lock_sock() possa ser adquirido sem manter o rwlock.
2. Como lock_sock() pode dormir, adia a liberação final da estrutura nfc_llcp_local para uma fila de trabalho (release_work). Isso evita um bug de "dormir em contexto atômico" quando a última referência local é liberada do contexto softirq. Além disso, mantém-se uma única referência ao dispositivo no objeto local desde o registro até sua destruição final.
3. Em nfc_llcp_local_get(), utiliza kref_get_unless_zero() para evitar ressuscitar um objeto local cuja desmontagem (teardown) já foi agendada.
4. Em llcp_sock_accept(), verifica-se se o estado do socket ouvinte ainda é LLCP_LISTEN após acordar de schedule_timeout() para prevenir bloqueios caso o ouvinte seja fechado simultaneamente.
5. Ao desvincular filhos não aceitos durante a liberação do ouvinte, eles são removidos da lista local->sockets, chama-se sock_orphan(), e libera-se sua referência inicial criada por sk_alloc através de sock_put().
6. Torna nfc_llcp_accept_unlink() idempotente protegendo o acesso ao pai com uma verificação NULL.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.