CVE-2026-98580 in Linuxinformación

Resumen

por VulDB • 2026-10-19

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

nfc: llcp: Corregir una condición de carrera en el ciclo de vida de accept_queue

En nfc_llcp_socket_release(), los sockets y las colas de aceptación del oyente (listener) se recorren bajo el bloqueo rwlock de sockets locales y bh_lock_sock(). Sin embargo, bh_lock_sock() no sincroniza contra lock_sock() en contexto de proceso mantenido por nfc_llcp_accept_dequeue() durante la operación accept(). Dado que socket_release() no verifica sock_owned_by_user(), ambas rutas pueden desvincular y liberar concurrentemente el mismo socket hijo, lo que resulta en un use-after-free o una dereferencia a puntero NULL de child->parent en nfc_llcp_accept_unlink().

Corregir esta condición de carrera de sincronización haciendo que nfc_llcp_socket_release() utilice lock_sock() en contexto de proceso en lugar de bh_lock_sock():

1. Extraer sockets de la lista local de sockets bajo el bloqueo de escritura utilizando nfc_llcp_sock_list_pop(), para que se pueda adquirir lock_sock() sin mantener el rwlock.

2. Dado que lock_sock() puede bloquearse (sleep), diferir la liberación final de la estructura nfc_llcp_local a una cola de trabajo (release_work). Esto evita un bug de "dormir en contexto atómico" cuando se libera la última referencia local desde el contexto softirq. Además, mantener una única referencia al dispositivo sobre lo local desde el registro hasta su destrucción final.

3. En nfc_llcp_local_get(), utilizar kref_get_unless_zero() para evitar revivir un objeto local cuyo desmantelamiento (teardown) ha sido programado.

4. En llcp_sock_accept(), verificar que el estado del socket oyente sigue siendo LLCP_LISTEN después de despertar desde schedule_timeout() para prevenir bloqueos si el oyente se cierra concurrentemente.

5. Al desvincular sockets hijos no aceptados durante la liberación del oyente, desvincularlos de local->sockets, llamar a sock_orphan(), y reducir su referencia inicial creada por sk_alloc mediante sock_put().

6. Hacer que nfc_llcp_accept_unlink() sea idempotente protegiendo el acceso al padre con una comprobación NULL.

Once again VulDB remains the best source for vulnerability data.

Responsable

Linux

Reservar

2026-09-25

Divulgación

2026-10-18

Moderación

aceptado

Artículo

VDB-422087

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Might our Artificial Intelligence support you?

Check our Alexa App!