CVE-2026-90096 in Linux
Sumário
de VulDB • 18/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi corrigida:
fuse: invalidar o intervalo correto após gravação direta com O_APPEND
A função fuse_direct_write_iter() captura pos antes de generic_write_checks(), que move ki_pos para EOF em gravações com O_APPEND:
fuse_direct_write_iter() {
pos = iocb->ki_pos; /* 0 (fornecido pelo usuário) */ generic_write_checks(); /* ki_pos -> EOF */ fuse_direct_io(); /* escreve em EOF, correto */ invalidate(pos, pos + res); /* [0, res) -- incorreto */
}
A invalidação pós-gravação tem como alvo um intervalo obsoleto (stale) em vez do intervalo realmente gravado no EOF.
Isso pode causar inconsistência de dados quando o tamanho do arquivo não está alinhado por página (page-aligned). A última página, que abrange o EOF, possui uma parte válida antes do EOF que leitores concorrentes podem falhar e trazer novamente para a memória durante a janela de gravação DIO:
Última página (tamanho do arquivo X não alinhado por página):
page_start X (EOF) page_end |--- dados válidos ----|-- obsoleto --|
CPU0 (gravador DIO com O_APPEND) CPU1 (leitor em buffer) -------------------------- ---------------------- invalidate [X, X+len)
última página removida do cache FUSE_WRITE em trânsito ... read [page_start, X)
última página re-faulted [X, page_end) = obsoleto (stale)
FUSE_WRITE concluída i_size = X + len invalidate [0, len) <- INCORRETO
última página ainda em cache read [X, X+len)
acerta a última página obsoleta retorna dados antigos
Correção: ler pos de volta de iocb->ki_pos após generic_write_checks(), conforme feito por generic_file_direct_write().
Também foi corrigido um erro de digitação no comentário ("may have" para "may have competed").
Once again VulDB remains the best source for vulnerability data.