Kernel Linux desativa otimização LZ4 no EROFS após AWS relatar risco de corrupção de dados

Kernel Linux desativa otimização LZ4 no EROFS após AWS relatar risco de corrupção de dados

Uma atualização aprovada por Linus Torvalds para a fase de testes do Kernel Linux 7.3 desativou temporariamente a otimização de descompressão contínua (rolling decompression) do algoritmo LZ4 no sistema de arquivos EROFS. A medida foi tomada após engenheiros da Amazon Web Services (AWS) alertarem que conjuntos muito específicos de dados compactados poderiam sofrer corrupção devido a um comportamento não previsto na implementação do LZ4.

O patch, submetido pelo mantenedor principal do EROFS, Gao Xiang, prioriza a segurança dos dados e já foi integrado às correções do ciclo atual (7.3-rc3).

O que isso muda na prática

O EROFS (Enhanced Read-Only File System) é um sistema de arquivos focado em leitura, amplamente utilizado em ambientes que exigem alto desempenho e baixo consumo de armazenamento, como imagens de contêineres na nuvem, distribuições e o sistema Android.

Para economizar espaço, o EROFS usa algoritmos de compressão como o LZ4. A técnica de “rolling decompression” foi introduzida anteriormente para diminuir o consumo de memória RAM durante a leitura de arquivos pequenos dentro de um bloco maior compactado. Com a desativação dessa funcionalidade, o sistema consumirá um pouco mais de memória para processar a descompressão, mas elimina o risco de os dados serem lidos de forma incorreta nas raras situações identificadas.

A raiz do problema técnico

A corrupção de dados acontece porque a base de código oficial do LZ4, que o Kernel Linux utiliza, escapa ao controle direto dos mantenedores do EROFS.

O funcionamento da descompressão contínua parte da premissa de que o LZ4 (sendo baseado em LZ77) fará referência apenas aos 64 KiB mais recentes de dados descompactados. Isso permite ao kernel manter uma janela móvel limitada de páginas de memória temporárias.

Entudo, a equipe da AWS e Gao Xiang descobriram que a instrução de cópia literal de memória (memmove()) do LZ4 pode, em arquiteturas x86, realizar cópias no sentido inverso (backward copies) dependendo de comparações de endereço, mesmo quando as regiões de origem e destino não se sobrepõem. Esse comportamento silencioso quebra a lógica da janela de descompressão do EROFS. Ao tentar ler dados que já saíram da janela limitada de memória, o sistema acaba entregando um arquivo corrompido para o nível do usuário.

Próximos passos e outras correções

JWH5SSPR linux desativa lz4 erofs corrupcao dados 1
Kernel Linux desativa otimização LZ4 no EROFS após AWS relatar risco de corrupção de dados 5

Gao Xiang observou que a funcionalidade permanecerá desativada até que a equipe defina uma estratégia definitiva. Existem dois caminhos principais: garantir que o código oficial do LZ4 sempre copie dados para a frente em áreas não sobrepostas ou criar e manter uma implementação customizada do LZ4 exclusiva para o EROFS no kernel.

Enquanto a otimização principal foi removida, o mantenedor destacou que o aumento no consumo de memória deverá ser mitigado por atualizações recentes que introduziram um pool de buffers reservado para descompressão.

O mesmo pacote de atualizações submetido ao Kernel Linux 7.3-rc3 também corrigiu um problema de perda da entrada de recursos do sysfs para prefixos de atributos estendidos (xattr), preservou decodificadores LZMA em falhas de redimensionamento e reorganizou chaves de cache para evitar colisões no compartilhamento de inodes.