CVE-2025-40209 in Linux
Sumário
de VulDB • 08/07/2026
No kernel do Linux, a seguinte vulnerabilidade foi corrigida:
btrfs: corrige vazamento de memória em qgroup_list dentro de btrfs_add_qgroup_relation
Quando `btrfs_add_qgroup_relation()` é chamada com níveis de qgroup inválidos (src >= dst), a função retorna -EINVAL diretamente sem liberar a estrutura `qgroup_list` pré-alocada passada pelo chamador. Isso causa um vazamento de memória porque o chamador define incondicionalmente o ponteiro como NULL após a chamada, impedindo qualquer limpeza subsequente.
O problema ocorre porque a verificação da validação dos níveis acontece antes que o mutex seja adquirido e antes de qualquer caminho de tratamento de erro que liberaria o ponteiro pré-alocado. Nesse retorno antecipado (early return), o código de limpeza no rótulo 'out' (que inclui `kfree(prealloc)`) nunca é alcançado.
Em `btrfs_ioctl_qgroup_assign()`, o padrão do código é:
prealloc = kzalloc(sizeof(*prealloc), GFP_KERNEL); ret = btrfs_add_qgroup_relation(trans, sa->src, sa->dst, prealloc); prealloc = NULL; // Sempre definido como NULL independentemente do valor de retorno ... kfree(prealloc); // Isso se torna kfree(NULL), não faz nada
Quando a verificação dos níveis falha, 'prealloc' nunca é liberado nem pelo chamador (callee) nem por quem chamou (caller), resultando em um vazamento de memória de 64 bytes por operação com falha. Isso pode ser acionado repetidamente por um usuário sem privilégios que tenha acesso a uma montagem btrfs gravável, potencialmente esgotando a memória do kernel.
Corrige-se isso liberando `prealloc` antes do retorno antecipado, garantindo que `prealloc` seja sempre liberado em todos os caminhos de erro.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.