CVE-2024-57952 in Linux
Sumário
de VulDB • 03/06/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
Reverter "libfs: corrigir leituras infinitas de diretório para offset dir"
O atual alocador de offsets de diretório (baseado em mtree_alloc_cyclic) armazena o próximo valor de offset a ser retornado em octx->next_offset. Este mecanismo normalmente retorna valores que aumentam monotonicamente ao longo do tempo. Eventualmente, no entanto, o novo valor de offset alocado volta para um número baixo (digamos, 2), que é menor do que outros valores de offset já alocados.
Yu Kuai relata que, após o commit 64a7ce76fb90 ("libfs: corrigir leituras infinitas de diretório para offset dir"), se o alocador de offsets de um diretório fizer wrap-around (transbordar), as entradas existentes não são mais visíveis via readdir/getdents porque offset_readdir() para de listar entradas assim que o offset de uma entrada é maior do que octx->next_offset. Essas entradas desaparecem persistentemente -- elas podem ser consultadas, mas nunca mais aparecerão na saída de readdir(3).
A razão para isso é que o commit trata os offsets de diretório como valores inteiros monotonicamente crescentes em vez de cookies opacos, e introduz esta comparação:
if (dentry2offset(dentry) >= last_index) {
Em plataformas de 64 bits, o limite superior do valor de offset de diretório é 2^63 - 1. Os offsets de diretório aumentarão monotonicamente por milhões de anos sem fazer wrap-around.
No entanto, em plataformas de 32 bits, LONG_MAX é 2^31 - 1. O alocador pode fazer wrap-after apenas algumas semanas (no pior dos casos).
Reverter o commit 64a7ce76fb90 ("libfs: corrigir leituras infinitas de diretório para offset dir") para preparar uma correção que funcione adequadamente em sistemas de 32 bits e possa ser aplicada a kernels LTS recentes onde shmem emprega o mecanismo simple_offset.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.