CVE-2022-48814

In the Linux kernel, the following vulnerability has been resolved: net: dsa: seville: register the mdiobus under devres As explained in commits: 74b6d7d13307 ("net: dsa: realtek: register the MDIO bus under devres") 5135e96a3dd2 ("net: dsa: don't allocate the slave_mii_bus using devres") mdiobus_free() will panic when called from devm_mdiobus_free() <- devres_release_all() <- __device_release_driver(), and that mdiobus was not previously unregistered. The Seville VSC9959 switch is a platform device, so the initial set of constraints that I thought would cause this (I2C or SPI buses which call ->remove on ->shutdown) do not apply. But there is one more which applies here. If the DSA master itself is on a bus that calls ->remove from ->shutdown (like dpaa2-eth, which is on the fsl-mc bus), there is a device link between the switch and the DSA master, and device_links_unbind_consumers() will unbind the seville switch driver on shutdown. So the same treatment must be applied to all DSA switch drivers, which is: either use devres for both the mdiobus allocation and registration, or don't use devres at all. The seville driver has a code structure that could accommodate both the mdiobus_unregister and mdiobus_free calls, but it has an external dependency upon mscc_miim_setup() from mdio-mscc-miim.c, which calls devm_mdiobus_alloc_size() on its behalf. So rather than restructuring that, and exporting yet one more symbol mscc_miim_teardown(), let's work with devres and replace of_mdiobus_register with the devres variant. When we use all-devres, we can ensure that devres doesn't free a still-registered bus (it either runs both callbacks, or none).
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
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:*:*:*:*:*:*

History

03 Oct 2025, 14:20

Type Values Removed Values Added
First Time Linux linux Kernel
Linux
CPE cpe:2.3:o:linux:linux_kernel:5.17:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc2:*:*:*:*:*:*
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
CWE NVD-CWE-noinfo
References () https://git.kernel.org/stable/c/0e816362d823cd46c666e64d8bffe329ee22f4cc - () https://git.kernel.org/stable/c/0e816362d823cd46c666e64d8bffe329ee22f4cc - Patch
References () https://git.kernel.org/stable/c/1d13e7221035947c62800c9d3d99b4ed570e27e7 - () https://git.kernel.org/stable/c/1d13e7221035947c62800c9d3d99b4ed570e27e7 - Patch
References () https://git.kernel.org/stable/c/bd488afc3b39e045ba71aab472233f2a78726e7b - () https://git.kernel.org/stable/c/bd488afc3b39e045ba71aab472233f2a78726e7b - Patch

21 Nov 2024, 07:34

Type Values Removed Values Added
Summary
  • (es) 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() &lt;- devres_release_all() &lt;- __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 -&gt;eliminar encendido -&gt;apagar) no se aplican. Pero hay algo más que se aplica aquí. Si el maestro DSA está en un bus que llama -&gt;remove from -&gt;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).
References () https://git.kernel.org/stable/c/0e816362d823cd46c666e64d8bffe329ee22f4cc - () https://git.kernel.org/stable/c/0e816362d823cd46c666e64d8bffe329ee22f4cc -
References () https://git.kernel.org/stable/c/1d13e7221035947c62800c9d3d99b4ed570e27e7 - () https://git.kernel.org/stable/c/1d13e7221035947c62800c9d3d99b4ed570e27e7 -
References () https://git.kernel.org/stable/c/bd488afc3b39e045ba71aab472233f2a78726e7b - () https://git.kernel.org/stable/c/bd488afc3b39e045ba71aab472233f2a78726e7b -

16 Jul 2024, 12:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-07-16 12:15

Updated : 2025-10-03 14:20


NVD link : CVE-2022-48814

Mitre link : CVE-2022-48814

CVE.ORG link : CVE-2022-48814


JSON object : View

Products Affected

linux

  • linux_kernel