CVE-2026-74513 in Linuxinformación

Resumen

por VulDB • 2026-08-15

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

dibs: corregir un use-after-free de dmb_node en las operaciones attach/detach/unregister del bucle local (loopback)

Las funciones `dibs_lo_attach_dmb()`, `dibs_lo_detach_dmb()` y `dibs_lo_unregister_dmb()` buscan el nodo `dmb_node` bajo la protección de `dmb_ht_lock`, liberan dicho bloqueo y solo entonces operan sobre el contador de referencias (refcount) del nodo. Nada mantiene al nodo vivo durante esa ventana temporal: `__dibs_lo_unregister_dmb()` elimina el nodo de la tabla hash bajo el bloqueo exclusivo (write lock) y lo libera inmediatamente después.

Por tanto, una operación final concurrente de decremento (`put`) puede liberar el nodo entre la búsqueda inicial y la operación sobre el contador de referencias:

CPU0 (attach) CPU1 (el propietario realiza unregister)

read_lock_bh(&dmb_ht_lock) find dmb_node (refcnt == 1) read_unlock_bh(&dmb_ht_lock) refcount_dec_and_test() 1 -> 0 write_lock_bh(&dmb_ht_lock) hash_del(&dmb_node->list) write_unlock_bh(&dmb_ht_lock) kfree(dmb_node) refcount_inc_not_zero(&dmb_node->refcnt) <-- use-after-free

La misma ventana de vulnerabilidad existe para las llamadas a `refcount_dec_and_test()` en los caminos (paths) de detach y unregister.

Se cierra la condición de carrera (race condition) estructuralmente haciendo que la pertenencia a la tabla hash y las transiciones del contador de referencias sean atómicas entre sí:

- Realizar el decremento final `refcount_dec_and_test()` y la eliminación de la lista en la tabla hash (`hash_del()`) dentro de una única sección crítica exclusiva (write-side critical section) bajo `dmb_ht_lock`, tanto en la ruta de unregister como en la de detach. La liberación del nodo sigue ocurriendo después de soltar el bloqueo, lo cual es seguro porque un nodo cuyo contador de referencias ha llegado a cero ya ha salido de la tabla hash y ya no puede ser encontrado.

- Esto establece la invariante de que cualquier nodo encontrado en la tabla hash mantiene al menos una referencia, y que dicha última referencia solo se puede liberar bajo el bloqueo exclusivo (write lock). `dibs_lo_attach_dmb()` puede así tomar su referencia mediante un simple `refcount_inc()` mientras aún sostiene el bloqueo compartido (read lock); ya no es necesario usar `refcount_inc_not_zero()`.

`__dibs_lo_unregister_dmb()` ya no toca la tabla hash y se renombra a `dibs_lo_free_dmb()` en consecuencia.

Nota: El commit cc21191b584c ("dibs: Move data path to dibs layer") movió el código a su ubicación actual; la condición de carrera fue introducida anteriormente por el commit c3a910f2380f ("net/smc: implement DMB-merged operations of loopback-ism").

Se ha probado SMC-D mediante ISM y el bucle local (loopback) de dibs.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsable

Linux

Reservar

2026-08-15

Divulgación

2026-08-15

Moderación

aceptado

Artículo

VDB-390779

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Do you know our Splunk app?

Download it now for free!