Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en Linux (CVE-2026-22981)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476 Desreferencia a puntero nulo (NULL)
Fecha de publicación:
23/01/2026
Última modificación:
02/04/2026

Descripción

En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br /> <br /> idpf: desvincular y cerrar netdevs mientras se maneja un reinicio<br /> <br /> Proteger la ruta de reinicio de las devoluciones de llamada configurando los netdevs a estado desvinculado y cerrando cualquier netdev en estado UP hasta que el manejo del reinicio haya finalizado. Durante un reinicio, el controlador desasignará recursos para el vport, y no hay garantía de que estos se recuperen, razón por la cual el vport_ctrl_lock existente no proporciona suficiente protección.<br /> <br /> idpf_detach_and_close() se llama justo antes del manejo del reinicio. Si el manejo del reinicio tiene éxito, el estado de los netdevs se recupera mediante una llamada a idpf_attach_and_open(). Si el manejo del reinicio falla, los netdevs permanecen inactivos. Las llamadas de desvinculación/inactivación están protegidas con el bloqueo RTNL para evitar condiciones de carrera con las devoluciones de llamada. En el lado de la recuperación, la vinculación se puede realizar sin mantener el bloqueo RTNL ya que no se esperan devoluciones de llamada en ese punto, debido a que la desvinculación/cierre siempre se realiza primero en ese flujo.<br /> <br /> La lógica anterior que restauraba el estado de los netdevs basada en el indicador IDPF_VPORT_UP_REQUESTED en la tarea de inicialización ya no es necesaria, de ahí la eliminación de idpf_set_vport_state(). El IDPF_VPORT_UP_REQUESTED todavía se utiliza para restaurar el estado de los netdevs después del reinicio, pero no tiene uso fuera del flujo de manejo del reinicio.<br /> <br /> idpf_init_hard_reset() se convierte a void, ya que se utilizaba como tal y no se realiza manejo de errores basado en su valor de retorno.<br /> <br /> Antes de este cambio, invocar reinicios duros y blandos simultáneamente hará que el controlador pierda el estado del vport:<br /> ip -br a<br /> UP<br /> echo 1 &amp;gt; /sys/class/net/ens801f0/device/reset&amp;amp; \<br /> ethtool -L ens801f0 combined 8<br /> ip -br a<br /> DOWN<br /> ip link set up<br /> ip -br a<br /> DOWN<br /> <br /> También en caso de un fallo en la ruta de reinicio, el netdev queda expuesto a devoluciones de llamada externas, mientras que los recursos del vport no están inicializados, lo que lleva a un fallo en un posterior ifup/down:<br /> [408471.398966] idpf 0000:83:00.0: HW reset detected<br /> [408471.411744] idpf 0000:83:00.0: Device HW Reset initiated<br /> [408472.277901] idpf 0000:83:00.0: El controlador no pudo contactar el firmware del dispositivo. Verifique que el FW esté en ejecución. Estado del controlador= 0x2<br /> [408508.125551] BUG: desreferencia de puntero NULL del kernel, dirección: 0000000000000078<br /> [408508.126112] #PF: acceso de lectura de supervisor en modo kernel<br /> [408508.126687] #PF: error_code(0x0000) - página no presente<br /> [408508.127256] PGD 2aae2f067 P4D 0<br /> [408508.127824] Oops: Oops: 0000 [#1] SMP NOPTI<br /> ...<br /> [408508.130871] RIP: 0010:idpf_stop+0x39/0x70 [idpf]<br /> ...<br /> [408508.139193] Call Trace:<br /> [408508.139637] <br /> [408508.140077] __dev_close_many+0xbb/0x260<br /> [408508.140533] __dev_change_flags+0x1cf/0x280<br /> [408508.140987] netif_change_flags+0x26/0x70<br /> [408508.141434] dev_change_flags+0x3d/0xb0<br /> [408508.141878] devinet_ioctl+0x460/0x890<br /> [408508.142321] inet_ioctl+0x18e/0x1d0<br /> [408508.142762] ? _copy_to_user+0x22/0x70<br /> [408508.143207] sock_do_ioctl+0x3d/0xe0<br /> [408508.143652] sock_ioctl+0x10e/0x330<br /> [408508.144091] ? find_held_lock+0x2b/0x80<br /> [408508.144537] __x64_sys_ioctl+0x96/0xe0<br /> [408508.144979] do_syscall_64+0x79/0x3d0<br /> [408508.145415] entry_SYSCALL_64_after_hwframe+0x76/0x7e<br /> [408508.145860] RIP: 0033:0x7f3e0bb4caff

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (incluyendo) 6.18.6 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.19:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.19:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.19:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.19:rc4:*:*:*:*:*:*