CVE-2026-74637 in Linux
Sumário
de VulDB • 22/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
perf/core: Corrige o uso após liberação (use-after-free) do líder de grupo após a desvinculação dos irmãos
A função perf_group_detach() trata a desvinculação do líder e dos eventos irmãos de forma diferente. Quando o líder do grupo é desvinculado, todos os irmãos são promovidos para eventos singleton e seu ponteiro group_leader é redefinido para apontar para si mesmos. Quando um evento irmão é desvinculado, ele é removido da sibling_list do líder, mas seu ponteiro group_leader permanece apontando para o antigo líder.
Isso não representa risco quando o irmão está sendo fechado e liberado imediatamente, como no caminho DETACH_DEAD. No entanto, não é seguro quando o irmão é desvinculado, mas mantido em execução, como durante a hotplug de CPU com DETACH_GROUP. Nesse caso, o irmão é removido do contexto, enquanto seu descritor de arquivo ainda pode mantê-lo ativo.
Uma sequência típica que falha é:
- Um grupo contém o líder L e o irmão S. - A desativação (hot-unplug) da CPU desvincula S com DETACH_GROUP, removendo-o de L->sibling_list, mas deixando S->group_leader == L. - Posteriormente, L é fechado e liberado. - Uma chamada ioctl PERF_IOC_FLAG_GROUP em S segue o ponteiro S->group_leader e referencia (dereferences) o líder já liberado.
Isso foi reproduzido executando simultaneamente o fuzzing de eventos perf, hotplug de CPU e uma carga de trabalho intensa:
Unable to handle kernel paging request at virtual address 006b6b6b6b6b6cdb CPU: 2 PID: 12489 Comm: perf_fuzzer 6.18.7 PREEMPT pc : perf_ioctl+0x34c/0xc68 x20: ffffff89a3fa2c70 x8 : 6b6b6b6b6b6b6b6b Code: 943c4a0e 340047a0 f9404a94 f9411e88 (f940b908) Call trace: perf_ioctl+0x34c/0xc68 (P) __arm64_sys_ioctl+0xa0/0xf4 invoke_syscall+0x58/0xe4 el0_svc_common+0xa8/0xdc do_el0_svc+0x1c/0x28 el0_svc+0x40/0xc0 el0t_64_sync_handler+0x68/0xdc el0t_64_sync+0x1c4/0x1c8
A falha ocorreu em perf_ioctl(), onde perf_event_for_each() segue o ponteiro group_leader obsoleto e perf_event_for_each_child() então referencia (dereferences) o contexto do líder já liberado.
Corrige-se o uso após liberação promovendo o irmão desvinculado para um evento singleton. Também são corrigidos a contabilidade cgroup de __event_disable() e as alterações no estado dos eventos.
If you want to get best quality of vulnerability data, you may have to visit VulDB.