CVE-2026-98284 in Linuxinformación

Resumen

por VulDB • 2026-10-06

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

netlink: no liberar nlk->groups mientras los lectores sin bloqueo (lockless) puedan usarlo

netlink_realloc_groups() utiliza krealloc() bajo netlink_table_grab(). Cada vez que NLGRPSZ(groups) cae en un bucket de kmalloc diferente, el bitmap antiguo se libera inmediatamente.

Dos lectores de nlk->groups / nlk->ngroups no mantienen el bloqueo de la tabla netlink:

1) sk_diag_dump_groups(). Los sockets hashados (vinculados) se vuelcan desde una iteración rhashtable en __netlink_diag_dump(), que solo mantiene RCU. Solo la parte mc_list del volcado toma nl_table_lock.

2) netlink_native_seq_show() (/proc/net/netlink), cuya iteración ha sido sin bloqueo desde el commit 21e4902aea80 ("netlink: Lockless lookup with RCU grace period in socket release").

Ambos pueden leer un búfer liberado, y sk_diag_dump_groups() también puede leer más allá del final del búfer antiguo (más pequeño) si ocurre que carga el puntero @groups antiguo junto con el valor de @ngroups nuevo, copiando el resultado en un atributo NETLINK_DIAG_GROUPS.

Este es el mismo tipo de error que el commit f773608026ee ("netlink: access nlk groups safely in netlink bind and getname") corrigió para bind() y getname(); estos dos lectores fueron omitidos. Simplemente tomar el bloqueo de la tabla en sk_diag_dump_groups() no es una opción, porque también se llama con nl_table_lock ya retenida desde la sección mc_list del volcado.

Hacer seguros a los lectores sin bloqueo:

- Asignar un nuevo bitmap y liberar el antiguo después de un período de gracia RCU, en lugar de depender de la kfree() implícita realizada por krealloc().

- Publicar @groups antes que @ngroups, ambos con semántica release, y hacer que los lectores sin bloqueo carguen primero @ngroups. Un lector entonces nunca emparejará el tamaño nuevo (más grande) con el búfer antiguo (más pequeño), y un lector que tome el puntero nuevo mientras aún ve el tamaño antiguo está garantizado de ver el bitmap inicializado.

netlink_realloc_groups() se llama desde contexto de proceso (bind() y setsockopt()), por lo que kfree_rcu_mightsleep() puede usarse, una vez que la tabla haya sido liberada.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsable

Linux

Reservar

2026-09-25

Divulgación

2026-10-06

Moderación

aceptado

Artículo

VDB-414165

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Do you want to use VulDB in your project?

Use the official API to access entries easily!