Vulnerabilidad en kernel de Linux (CVE-2022-48814)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
16/07/2024
Última modificación:
03/10/2025
Descripción
En el kernel de Linux se ha resuelto la siguiente vulnerabilidad: net: dsa: seville: registrar el mdiobus bajo devres Como se explica en commits: 74b6d7d13307 ("net: dsa: realtek: registrar el bus MDIO bajo devres") 5135e96a3dd2 ("net: dsa: no asigne el esclavo_mii_bus usando devres") mdiobus_free() entrará en pánico cuando se llame desde devm_mdiobus_free() <- devres_release_all() <- __device_release_driver(), y ese mdiobus no fue anulado previamente. El conmutador Sevilla VSC9959 es un dispositivo de plataforma, por lo que el conjunto inicial de restricciones que pensé que causarían esto (buses I2C o SPI que llaman ->eliminar encendido ->apagar) no se aplican. Pero hay algo más que se aplica aquí. Si el maestro DSA está en un bus que llama ->remove from ->shutdown (como dpaa2-eth, que está en el bus fsl-mc), hay un enlace de dispositivo entre el conmutador y el maestro DSA, y device_links_unbind_consumers( ) desvinculará el controlador del interruptor de Sevilla al apagarlo. Por lo tanto, se debe aplicar el mismo tratamiento a todos los controladores de conmutador DSA, que es: usar devres tanto para la asignación como para el registro de mdiobus, o no usar devres en absoluto. El controlador Sevilla tiene una estructura de código que podría acomodar las llamadas mdiobus_unregister y mdiobus_free, pero tiene una dependencia externa de mscc_miim_setup() de mdio-mscc-miim.c, que llama a devm_mdiobus_alloc_size() en su nombre. Entonces, en lugar de reestructurar eso y exportar un símbolo más mscc_miim_teardown(), trabajemos con devres y reemplacemos of_mdiobus_register con la variante devres. Cuando usamos all-devres, podemos asegurarnos de que devres no libere un bus aún registrado (ejecuta ambas devoluciones de llamada o ninguna).
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
| CPE | Desde | Hasta |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.9 (incluyendo) | 5.15.27 (excluyendo) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 5.16.10 (excluyendo) |
| cpe:2.3:o:linux:linux_kernel:5.17:rc1:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.17:rc2:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.17:rc3:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/0e816362d823cd46c666e64d8bffe329ee22f4cc
- https://git.kernel.org/stable/c/1d13e7221035947c62800c9d3d99b4ed570e27e7
- https://git.kernel.org/stable/c/bd488afc3b39e045ba71aab472233f2a78726e7b
- https://git.kernel.org/stable/c/0e816362d823cd46c666e64d8bffe329ee22f4cc
- https://git.kernel.org/stable/c/1d13e7221035947c62800c9d3d99b4ed570e27e7
- https://git.kernel.org/stable/c/bd488afc3b39e045ba71aab472233f2a78726e7b



