CVE-2022-48818

In the Linux kernel, the following vulnerability has been resolved: net: dsa: mv88e6xxx: don't use devres for mdiobus 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 mv88e6xxx is an MDIO 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 Marvell switch driver on shutdown. systemd-shutdown[1]: Powering off. mv88e6085 0x0000000008b96000:00 sw_gl0: Link is Down fsl-mc dpbp.9: Removing from iommu group 7 fsl-mc dpbp.8: Removing from iommu group 7 ------------[ cut here ]------------ kernel BUG at drivers/net/phy/mdio_bus.c:677! Internal error: Oops - BUG: 0 [#1] PREEMPT SMP Modules linked in: CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted 5.16.5-00040-gdc05f73788e5 #15 pc : mdiobus_free+0x44/0x50 lr : devm_mdiobus_free+0x10/0x20 Call trace: mdiobus_free+0x44/0x50 devm_mdiobus_free+0x10/0x20 devres_release_all+0xa0/0x100 __device_release_driver+0x190/0x220 device_release_driver_internal+0xac/0xb0 device_links_unbind_consumers+0xd4/0x100 __device_release_driver+0x4c/0x220 device_release_driver_internal+0xac/0xb0 device_links_unbind_consumers+0xd4/0x100 __device_release_driver+0x94/0x220 device_release_driver+0x28/0x40 bus_remove_device+0x118/0x124 device_del+0x174/0x420 fsl_mc_device_remove+0x24/0x40 __fsl_mc_device_remove+0xc/0x20 device_for_each_child+0x58/0xa0 dprc_remove+0x90/0xb0 fsl_mc_driver_remove+0x20/0x5c __device_release_driver+0x21c/0x220 device_release_driver+0x28/0x40 bus_remove_device+0x118/0x124 device_del+0x174/0x420 fsl_mc_bus_remove+0x80/0x100 fsl_mc_bus_shutdown+0xc/0x1c platform_shutdown+0x20/0x30 device_shutdown+0x154/0x330 kernel_power_off+0x34/0x6c __do_sys_reboot+0x15c/0x250 __arm64_sys_reboot+0x20/0x30 invoke_syscall.constprop.0+0x4c/0xe0 do_el0_svc+0x4c/0x150 el0_svc+0x24/0xb0 el0t_64_sync_handler+0xa8/0xb0 el0t_64_sync+0x178/0x17c 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 Marvell driver already has a good structure for mdiobus removal, so just plug in mdiobus_free and get rid of devres.
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:*:*:*:*:*:*:*:*
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

06 Oct 2025, 17:09

Type Values Removed Values Added
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
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:*:*:*:*:*:*
References () https://git.kernel.org/stable/c/1b451c3994a2d322f8e55032c62c8b47b7d95900 - () https://git.kernel.org/stable/c/1b451c3994a2d322f8e55032c62c8b47b7d95900 - Patch
References () https://git.kernel.org/stable/c/8b626d45127d6f5ada7d815b83cfdc09e8cb1394 - () https://git.kernel.org/stable/c/8b626d45127d6f5ada7d815b83cfdc09e8cb1394 - Patch
References () https://git.kernel.org/stable/c/8ccebe77df6e0d88c72ba5e69cf1835927e53b6c - () https://git.kernel.org/stable/c/8ccebe77df6e0d88c72ba5e69cf1835927e53b6c - Patch
References () https://git.kernel.org/stable/c/f53a2ce893b2c7884ef94471f170839170a4eba0 - () https://git.kernel.org/stable/c/f53a2ce893b2c7884ef94471f170839170a4eba0 - Patch
CWE NVD-CWE-noinfo

21 Nov 2024, 07:34

Type Values Removed Values Added
References () https://git.kernel.org/stable/c/1b451c3994a2d322f8e55032c62c8b47b7d95900 - () https://git.kernel.org/stable/c/1b451c3994a2d322f8e55032c62c8b47b7d95900 -
References () https://git.kernel.org/stable/c/8b626d45127d6f5ada7d815b83cfdc09e8cb1394 - () https://git.kernel.org/stable/c/8b626d45127d6f5ada7d815b83cfdc09e8cb1394 -
References () https://git.kernel.org/stable/c/8ccebe77df6e0d88c72ba5e69cf1835927e53b6c - () https://git.kernel.org/stable/c/8ccebe77df6e0d88c72ba5e69cf1835927e53b6c -
References () https://git.kernel.org/stable/c/f53a2ce893b2c7884ef94471f170839170a4eba0 - () https://git.kernel.org/stable/c/f53a2ce893b2c7884ef94471f170839170a4eba0 -
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: net: dsa: mv88e6xxx: no use devres para mdiobus Como se explica en los commits: 74b6d7d13307 ("net: dsa: realtek: registre el bus MDIO en 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 mv88e6xxx es un dispositivo MDIO, por lo que el conjunto inicial de restricciones que pensé que causaría esto (buses I2C o SPI que llaman -&gt;eliminar en -&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 Marvell al apagarlo. systemd-shutdown[1]: Apagando. mv88e6085 0x0000000008b96000:00 sw_gl0: El enlace está inactivo fsl-mc dpbp.9: Eliminando del grupo iommu 7 fsl-mc dpbp.8: Eliminando del grupo iommu 7 ------------[ cortar aquí ]- ----------- ¡ERROR del kernel en drivers/net/phy/mdio_bus.c:677! Error interno: Ups - ERROR: 0 [#1] PREEMPT Módulos SMP vinculados en: CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted 5.16.5-00040-gdc05f73788e5 #15 pc: mdiobus_free+0x44/0x50 lr: devm_mdiobus_free +0x10/0x20 Rastreo de llamadas: mdiobus_free+0x44/0x50 devm_mdiobus_free+0x10/0x20 devres_release_all+0xa0/0x100 __device_release_driver+0x190/0x220 device_release_driver_internal+0xac/0xb0 device_links_unbind_consumers+0xd4/0x 100 __device_release_driver+0x4c/0x220 dispositivo_release_driver_internal+0xac/0xb0 device_links_unbind_consumers+0xd4 /0x100 __device_release_driver+0x94/0x220 dispositivo_release_driver+0x28/0x40 bus_remove_device+0x118/0x124 device_del+0x174/0x420 fsl_mc_device_remove+0x24/0x40 __fsl_mc_device_remove+0xc/0x20 _for_each_child+0x58/0xa0 dprc_remove+0x90/0xb0 fsl_mc_driver_remove+0x20/0x5c __device_release_driver+0x21c /0x220 dispositivo_liberación_controlador+0x28/0x40 bus_remove_device+0x118/0x124 dispositivo_del+0x174/0x420 fsl_mc_bus_remove+0x80/0x100 fsl_mc_bus_shutdown+0xc/0x1c plataforma_apagado+0x20/0x30 54/0x330 kernel_power_off+0x34/0x6c __do_sys_reboot+0x15c/0x250 __arm64_sys_reboot+0x20 /0x30 invoke_syscall.constprop.0+0x4c/0xe0 do_el0_svc+0x4c/0x150 el0_svc+0x24/0xb0 el0t_64_sync_handler+0xa8/0xb0 el0t_64_sync+0x178/0x17c 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 utilice devres en absoluto. El controlador Marvell ya tiene una buena estructura para la eliminación de mdiobus, así que simplemente conecte mdiobus_free y elimine los devres.

16 Jul 2024, 12:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-07-16 12:15

Updated : 2025-10-06 17:09


NVD link : CVE-2022-48818

Mitre link : CVE-2022-48818

CVE.ORG link : CVE-2022-48818


JSON object : View

Products Affected

linux

  • linux_kernel