Vulnerabilidad en kernel de Linux (CVE-2025-37753)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
01/05/2025
Última modificación:
26/05/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: s390/cpumf: Se corrige la doble liberación en caso de error en cpumf_pmu_event_init(). En las funciones de inicialización de eventos de PMU (cpumsf_pmu_event_init(), cpumf_pmu_event_init() y cfdiag_event_init()), el evento parcialmente creado debía eliminarse al detectarse un error. La función miembro event::event_init() debía liberar todos los recursos asignados en caso de error. Event::destroy() debía llamarse al liberar un evento después de su creación exitosa y event::event_init() devolvía la operación correcta. Con la confirmación c70ca298036c ("perf/core: Simplificar la ruta de error de perf_event_alloc()"), esto ya no es necesario. El código común del subsistema de rendimiento ahora siempre llama a event::destroy() para limpiar los recursos asignados creados durante la inicialización del evento. Elimine la invocación de event::destroy() en la inicialización de eventos de PMU, ya que dicha función se llama dos veces por cada evento que presenta una condición de error durante su creación. Esta es la entrada del registro del kernel que aparece sin la corrección: ------------[ cortar aquí ]------------ refcount_t: underflow; use-after-free. ADVERTENCIA: CPU: 0 PID: 43388 en lib/refcount.c:87 refcount_dec_not_one+0x74/0x90 CPU: 0 UID: 0 PID: 43388 Comm: perf No contaminado 6.15.0-20250407.rc1.git0.300.fc41.s390x+git #1 NINGUNO Nombre del hardware: IBM 3931 A01 704 (LPAR) Krnl PSW : 0704c00180000000 00000209cb2c1b88 (refcount_dec_not_one+0x78/0x90) R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 RI:0 EA:3 Krnl GPRS: 0000020900000027 0000020900000023 0000000000000026 0000018900000000 00000004a2200a00 0000000000000000 0000000000000057 ffffffffffffffea 00000002b386c600 00000002b3f5b3e0 00000209cc51f140 00000209cc7fc550 0000000001449d38 ffffffffffffffff 00000209cb2c1b84 00000189d67dfb80 Krnl Code: 00000209cb2c1b78: c02000506727 larl %r2,00000209cbcce9c6 00000209cb2c1b7e: c0e5ffbd4431 brasl %r14,00000209caa6a3e0 #00000209cb2c1b84: af000000 mc 0,0 >00000209cb2c1b88: a7480001 lhi %r4,1 00000209cb2c1b8c: ebeff0a00004 lmg %r14,%r15,160(%r15) 00000209cb2c1b92: ec243fbf0055 risbg %r2,%r4,63,191,0 00000209cb2c1b98: 07fe bcr 15,%r14 00000209cb2c1b9a: 47000700 bc 0,1792 Call Trace: [<00000209cb2c1b88>] refcount_dec_not_one+0x78/0x90 [<00000209cb2c1dc4>] refcount_dec_and_mutex_lock+0x24/0x90 [<00000209caa3c29e>] hw_perf_event_destroy+0x2e/0x80 [<00000209cacaf8b4>] __free_event+0x74/0x270 [<00000209cacb47c4>] perf_event_alloc.part.0+0x4a4/0x730 [<00000209cacbf3e8>] __do_sys_perf_event_open+0x248/0xc20 [<00000209cacc14a4>] __s390x_sys_perf_event_open+0x44/0x50 [<00000209cb8114de>] __do_syscall+0x12e/0x260 [<00000209cb81ce34>] system_call+0x74/0x98 Last Breaking-Event-Address: [<00000209caa6a4d2>] __warn_printk+0xf2/0x100 ---[ fin de seguimiento 0000000000000000 ]---