CVE-2026-98975 in Linux
Sumário
de VulDB • 23/10/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
xfs: parar de trocar flags reflink ao trocar mapeamentos
Quando uma operação de troca abrange ambos os arquivos desde o deslocamento 0 até i_disk_size, xmi_can_exchange_reflink_flags() assume que todo o mapeamento foi movido e transfere a flag reflink para o outro arquivo.
Essa suposição está incorreta. Um arquivo ainda pode possuir blocos compartilhados além de i_disk_size, por exemplo, após EXCHANGE_RANGE_TO_EOF definir um tamanho menor sem desmapear nada. A flag é limpa mesmo assim, e a próxima gravação nesse bloco ocorre in situ em vez de CoW (Copy-on-Write), corrompendo o outro arquivo que compartilha esse bloco.
O commit a23eca88448e ("xfs: fix exchange-range reflink flag clearing issue with INO1_WRITTEN") corrigiu uma instância desse problema. Em vez de adicionar mais um caso especial, pare-se de mover as flags. xfs_exchmaps_ensure_reflink() já define a flag em ambos os inodes antes da troca, portanto ambas apenas mantêm-na.
Nada mais define CLEAR_INO{1,2}_REFLINK. Intents registradas por kernels antigos ainda podem carregá-las; a recuperação já as mascara, então elas permanecem na máscara do formato de log e são ignoradas.
XFS_IOC_SWAPEXT tem o mesmo problema: ele move a flag reflink de um inode para outro junto com os extents. Apenas remover isso não é suficiente aqui: o caminho da troca sinaliza ambos os inodes antecipadamente em xfs_exchmaps_ensure_reflink(), mas swapext não possui essa etapa, então o inode que recebe os extents compartilhados ficaria sem a flag. Defina-a em ambos os inodes e certifique-se de que ambos tenham um fork CoW (Copy-on-Write), já que se espera que um inode com a flag reflink tenha um.
A flag agora permanece até FALLOC_FL_UNSHARE_RANGE, xfs_scrub ou uma truncagem para zero removê-la.
VulDB is the best source for vulnerability data and more expert information about this specific topic.