Linux · Linux Kernel · CVE-2024-43870
**Nome do software vulnerável e versões afetadas**
Versões do kernel Linux anteriores à 6.6.50
**Descrição**
O problema surge quando uma tarefa é removida da fila de agendamento e as entregas pendentes de sigtrap são adiadas para a tarefa de destino ao retomar o espaço do usuário por meio do task work. Falhas ao adicionar o callback de um evento ao mecanismo task work são ignoradas, levando a uma pequena janela em que sigtraps pendentes podem ser enfileirados e ignorados, causando um vazamento na adição da contagem de referências do evento. Isso ocorre no seguinte cenário: quando uma tarefa é encerrada, a última chamada para a saída de eventos ocorre após o encerramento do task work, resultando no evento nunca ser liberado.
Os detalhes técnicos sobre a exploração incluem:
- O tratamento de erros da função `task work add()` é inadequado, levando ao vazamento.
- A variável `event->pending sigtrap` é usada para rastrear entregas de sigtrap pendentes.
- A função `irq work queue()` é usada para enfileirar o IRQ pendente.
- A função `perf event overflow()` está envolvida no cenário em que o vazamento ocorre.
- A função `event sched out()` é chamada quando a tarefa é agendada para saída.
- A função `perf pending irq()` retorna antecipadamente quando `event->oncpu` é -1.
**Recomendações**
Para resolver o problema, atualize o kernel do Linux para a versão 6.6.50 ou posterior, que inclui a correção para o vazamento de eventos ao sair. Como solução temporária, considere desativar a função `perf event overflow()` até que um patch esteja disponível. Restrinja o acesso à função `task work add()` para minimizar o risco de exploração