Vulnerabilidad en Linux (CVE-2026-23209)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
14/02/2026
Última modificación:
18/02/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
macvlan: arreglar la recuperación de errores en macvlan_common_newlink()<br />
<br />
valis proporcionó una buena reproducción para colapsar el kernel:<br />
<br />
ip link add p1 type veth peer p2<br />
ip link set address 00:00:00:00:00:20 dev p1<br />
ip link set up dev p1<br />
ip link set up dev p2<br />
<br />
ip link add mv0 link p2 type macvlan mode source<br />
ip link add invalid% link p2 type macvlan mode source macaddr add 00:00:00:00:00:20<br />
<br />
ping -c1 -I p1 1.2.3.4<br />
<br />
También proporcionó un análisis muy detallado:<br />
<br />
&#39;El problema se activa cuando se crea un nuevo enlace macvlan con el modo MACVLAN_MODE_SOURCE y el parámetro MACVLAN_MACADDR_ADD (o MACVLAN_MACADDR_SET), el dispositivo inferior ya tiene un puerto macvlan y register_netdevice() llamado desde macvlan_common_newlink() falla (por ejemplo, debido al nombre de enlace no válido).<br />
<br />
En este caso, macvlan_hash_add_source es llamado desde macvlan_change_sources() / macvlan_common_newlink():<br />
<br />
Esto añade una referencia a vlan al vlan_source_hash del puerto usando macvlan_source_entry.<br />
<br />
vlan es un puntero a los datos privados del enlace que se está creando.<br />
<br />
Cuando register_netdevice() falla, el error es devuelto desde macvlan_newlink() a rtnl_newlink_create():<br />
<br />
if (ops-&gt;newlink)<br />
err = ops-&gt;newlink(dev, &amp;params, extack);<br />
else<br />
err = register_netdevice(dev);<br />
if (err &lt; 0) {<br />
free_netdev(dev);<br />
goto out;<br />
}<br />
<br />
y se llama a free_netdev(), causando un kvfree() en la estructura net_device que todavía está referenciada en la entrada de origen adjunta al puerto macvlan del dispositivo inferior.<br />
<br />
Ahora, todos los paquetes enviados en el puerto macvlan con una dirección MAC de origen coincidente activarán un uso después de liberación en macvlan_forward_source().&#39;<br />
<br />
Con todo eso, mi solución es asegurarme de que llamamos a macvlan_flush_sources() independientemente del valor de @create cada vez que se toma la ruta "goto destroy_macvlan_port;".<br />
<br />
Muchas gracias a valis por hacer seguimiento de este problema.
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/11ba9f0dc865136174cb98834280fb21bbc950c7
- https://git.kernel.org/stable/c/5dae6b36a7cb7a4fcf4121b95e9ca7f96f816c8a
- https://git.kernel.org/stable/c/986967a162142710076782d5b93daab93a892980
- https://git.kernel.org/stable/c/c43d0e787cbba569ec9d11579ed370b50fab6c9c
- https://git.kernel.org/stable/c/cdedcd5aa3f3cb8b7ae0f87ab3a936d0bd583d66
- https://git.kernel.org/stable/c/da5c6b8ae47e414be47e5e04def15b25d5c962dc
- https://git.kernel.org/stable/c/f8db6475a83649689c087a8f52486fcc53e627e9



