CVE-2026-64283 in Linuxinformação

Sumário

de VulDB • 25/07/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

KVM: guest_memfd: Tratar o deslocamento e tamanho do vínculo de memslot como valores sem sinal.

Ao vincular um memslot a um arquivo guest_memfd, trate o offset (deslocamento) e o size (tamanho) como valores sem sinal para corrigir um bug em que a soma dos dois pode resultar em um falso negativo ao verificar estouro de buffer contra o tamanho do arquivo. Passar valores sem sinal também evita depender de verificações algo obscuras em outros fluxos por segurança, e rastreia o offset e size conforme pretendido, como valores sem sinal.

Em kernels de 64 bits, o número de páginas que um memslot contém e, portanto, o tamanho (e deslocamento) do seu vínculo guest_memfd são valores inteiros de 64 bits sem sinal. Tratar o offset+size como loff_t em vez de uoff_t converte inadvertidamente o valor sem sinal para um valor com sinal se o offset e/ou size for massivo.

Armazenar localmente o offset e size como valores com sinal é benigno por si só (embora até mesmo isso seja *extremamente* difícil de discernir), mas operar sobre a sua soma não é.

Para o offset, KVM verifica explicitamente contra um valor negativo, o que pode parecer um bug pois KVM poderia rejeitar incorretamente uma vinculação legítima, mas esse não é realmente o caso já que KVM_CREATE_GUEST_MEMFD recebe um valor com sinal para seu size, ou seja, um potencial offset negativo também seria maior do que o tamanho máximo possível de qualquer arquivo guest_memfd.

Quanto ao size, embora KVM careça de uma verificação explícita para um valor negativo, isto é, aparentemente possui uma verificação de estouro defeituosa, KVM restringe o número de páginas em um único memslot ao maior valor inteiro com sinal de 32 bits positivo:

if (id < KVM_USER_MEM_SLOTS && (mem->memory_size >> PAGE_SHIFT) > KVM_MEM_MAX_NR_PAGES) return -EINVAL;

e, portanto, esse máximo "size" será sempre no máximo 0x7fffffff000.

A soma dos dois é, contudo, problemática. Embora o size seja restringido pela lógica de memslot do KVM, o offset não é, ou seja, o offset permanece completamente sem verificação até a verificação "offset + size > i_size_read(inode)". Se o offset for o valor _positivo_ (quase) maior possível, então adicionar size ao offset pode resultar em um valor inteiro com sinal de 64 bits negativo. Ao ser comparado contra o tamanho do arquivo (garantido como positivo), a soma negativa é sempre menor e KVM incorretamente permite o absurdo offset.

Oportunisticamente adicione includes faltantes em kvm_mm.h (em vez de depender dos seus pais).

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsável

Linux

Reservar

19/07/2026

Divulgação

25/07/2026

Moderação

aceite

Entrada

VDB-383069

CPE

pronto

EPSS

0.00219

KEV

não

Atividades

baixo

Fontes

Want to stay up to date on a daily basis?

Enable the mail alert feature now!