Vulnerabilidad en kernel de Linux (CVE-2021-47441)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-787
Escritura fuera de límites
Fecha de publicación:
22/05/2024
Última modificación:
02/04/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: mlxsw: Thermal: corrige accesos a memoria fuera de los límites Actualmente, mlxsw permite establecer estados de enfriamiento por encima del estado de enfriamiento máximo admitido por el controlador: # cat /sys/class/ Thermal/thermal_zone2/cdev0/type mlxsw_fan # cat /sys/class/thermal/thermal_zone2/cdev0/max_state 10 # echo 18 > /sys/class/thermal/thermal_zone2/cdev0/cur_state # echo $? 0 Esto da como resultado accesos a la memoria fuera de los límites cuando las estadísticas de transición de estado térmico están habilitadas (CONFIG_THERMAL_STATISTICS=y), ya que se accede a la tabla de transición con un índice (estado) demasiado grande [1]. Según el mantenedor térmico, es responsabilidad del conductor rechazar este tipo de operaciones [2]. Por lo tanto, devolverá un error cuando el estado que se establecerá exceda el estado de enfriamiento máximo admitido por el controlador. Para evitar el código inactivo, como lo sugiere el mantenedor térmico [3], revierta parcialmente el commit a421ce088ac8 ("mlxsw: core: Extend Cooling Device with Cooling Levels") que intentó interpretar estos estados de enfriamiento no válidos (por encima del máximo) de una manera especial. . La matriz de niveles de enfriamiento no se elimina para evitar que los ventiladores bajen del 20 % de PWM, lo que provocaría que se atasquen en el 0 % de PWM. [1] ERROR: KASAN: losa fuera de los límites en Thermal_cooling_device_stats_update+0x271/0x290 Lectura de tamaño 4 en la dirección ffff8881052f7bf8 por tarea kworker/0:0/5 CPU: 0 PID: 5 Comm: kworker/0:0 Not tainted 5.15.0-rc3-custom-45935-gce1adf704b14 #122 Nombre del hardware: Mellanox Technologies Ltd. "MSN2410-CB2FO"/"SA000874", BIOS 4.6.5 08/03/2016 Cola de trabajo: events_freezable_power_ Thermal_zone_device_check Seguimiento de llamadas: dump_stack_lvl+0x8b /0xb3 print_address_description.constprop.0+0x1f/0x140 kasan_report.cold+0x7f/0x11b Thermal_cooling_device_stats_update+0x271/0x290 __thermal_cdev_update+0x15e/0x4e0 Thermal_cdev_update+0x9f/0xe0 70/0xee0 actualización_dispositivo_zona_termal+0x3f6/0xdf0 proceso_one_work+0xa42/0x1770 hilo_trabajador+ 0x62f/0x13e0 kthread+0x3ee/0x4e0 ret_from_fork+0x1f/0x30 Asignado por tarea 1: kasan_save_stack+0x1b/0x40 __kasan_kmalloc+0x7c/0x90 Thermal_cooling_device_setup_sysfs+0x153/0x2c0 _device_register.part.0+0x25b/0x9c0 Thermal_cooling_device_register+0xb3/0x100 mlxsw_thermal_init+0x5c5 /0x7e0 __mlxsw_core_bus_device_register+0xcb3/0x19c0 mlxsw_core_bus_device_register+0x56/0xb0 mlxsw_pci_probe+0x54f/0x710 local_pci_probe+0xc6/0x170 pci_device_probe+0x2b2/0x4d0 very_probe+ 0x293/0xd10 __driver_probe_device+0x2af/0x440 driver_probe_device+0x51/0x1e0 __driver_attach+0x21b/0x530 bus_for_each_dev+0x14c /0x1d0 bus_add_driver+0x3ac/0x650 driver_register+0x241/0x3d0 mlxsw_sp_module_init+0xa2/0x174 do_one_initcall+0xee/0x5f0 kernel_init_freeable+0x45a/0x4de kernel_init+0x1f/0x210 f/0x30 La dirección con errores pertenece al objeto en ffff8881052f7800 que pertenece al caché kmalloc-1k de tamaño 1024 La dirección con errores se encuentra 1016 bytes dentro de la región de 1024 bytes [ffff8881052f7800, ffff8881052f7c00) La dirección con errores pertenece a la página: página:0000000052355272 refcount:1 mapcount:0 mapeo:0000000000000000 índice :0x0 pfn: 0x1052f0 cabeza:0000000052355272 orden:3 compuesto_mapcount:0 compuesto_pincount:0 banderas: 0x200000000010200(slab|head|node=0|zone=2) raw: 0200000000010200 ffffea0005034800 00000003000 00003 ffff888100041dc0 raw: 0000000000000000 0000000000100010 00000001ffffffff 00000000000000000 página volcada porque: kasan: se detectó mal acceso Estado de la memoria alrededor de la dirección del error: ffff8881052f7a80: 00 00 00 00 00 00 04 fc fc fc fc fc fc fc fc fc ffff8881052f7b00: fc fc fc fc fc fc fc fc fc fc fc fc >ffff8881052f7 b80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc ^ ffff8881052f7c00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc ---truncado---
Impacto
Puntuación base 3.x
7.30
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.10 (incluyendo) | 5.4.155 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (incluyendo) | 5.10.75 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.14.14 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:5.15:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.15:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.15:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.15:rc4:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.15:rc5:*:*:*:*:*:* |
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/332fdf951df8b870e3da86b122ae304e2aabe88c
- https://git.kernel.org/stable/c/ae0993739e14a102d506aa09e11b0065f3144f10
- https://git.kernel.org/stable/c/df8e58716afb3bee2b59de66b1ba1033f2e26303
- https://git.kernel.org/stable/c/e59d839743b50cb1d3f42a786bea48cc5621d254
- https://git.kernel.org/stable/c/332fdf951df8b870e3da86b122ae304e2aabe88c
- https://git.kernel.org/stable/c/ae0993739e14a102d506aa09e11b0065f3144f10
- https://git.kernel.org/stable/c/df8e58716afb3bee2b59de66b1ba1033f2e26303
- https://git.kernel.org/stable/c/e59d839743b50cb1d3f42a786bea48cc5621d254