CVE-2026-64283 in Linuxinformation

Résumé

par VulDB • 25/07/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

KVM : guest_memfd : Traiter l'offset et la taille de la liaison du memslot comme des valeurs non signées

Lors de la liaison d'un memslot à un fichier guest_memfd, traiter l'offset (décalage) et la taille comme des valeurs non signées permet de corriger un bug où la somme des deux peut entraîner un faux négatif lors de la vérification du dépassement de capacité (overflow) par rapport à la taille du fichier. Le passage de valeurs non signées évite également de s'appuyer sur des contrôles quelque peu obscurs dans d'autres flux pour garantir la sécurité, et permet de suivre l'offset et la taille comme ils sont censés être suivis, c'est-à-dire en tant que valeurs non signées.

Sur les noyaux 64 bits, le nombre de pages contenues dans un memslot, et donc la taille (et l'offset) de sa liaison guest_memfd, sont des valeurs non signées sur 64 bits. Le fait d'utiliser loff_t au lieu de uoff_t pour représenter offset+size convertit involontairement la valeur non signée en une valeur signée si l'offset et/ou la taille est massive.

Le stockage local de l'offset et de la taille sous forme de valeurs signées n'est pas dangereux en soi (bien que cela soit *extrêmement* difficile à discerner), mais leur opération sur leur somme ne l'est pas.

Pour l'offset, KVM effectue explicitement une vérification contre une valeur négative, ce qui pourrait sembler être un bug car KVM pourrait rejeter incorrectement une liaison légitime, mais ce n'est en réalité pas le cas puisque KVM_CREATE_GUEST_MEMFD prend une valeur signée pour sa taille ; par conséquent, un offset potentiellement négatif est également supérieur à la taille maximale possible de tout fichier guest_memfd.

Concernant la taille, bien que KVM ne dispose pas d'une vérification explicite contre une valeur négative (c'est-à-dire qu'il semble présenter une vérification du dépassement de capacité défectueuse), KVM restreint le nombre de pages dans un seul memslot à la plus grande valeur signée positive sur 32 bits :

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

et donc cette « taille » maximale ne peut jamais dépasser 0x7fffffff000.

La somme des deux est toutefois problématique. Bien que la taille soit restreinte par la logique de memslot de KVM, l'offset ne l'est pas ; c'est-à-dire que l'offset n'est entièrement vérifié qu'à travers le contrôle « offset + size > i_size_read(inode) ». Si l'offset est la valeur _positive_ (nearly) maximale possible, alors ajouter la taille à l'offset peut résulter en une valeur signée négative sur 64 bits. Lorsqu'elle est comparée à la taille du fichier (garantie comme étant positive), cette somme négative est toujours inférieure, et KVM autorise incorrectement cet offset absurde.

Ajout opportun des inclusions manquantes dans kvm_mm.h (au lieu de s'appuyer sur ses parents).

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

Responsable

Linux

Réserver

19/07/2026

Divulgation

25/07/2026

Modérer

accepté

Entrée

VDB-383069

CPE

prêt

EPSS

0.00210

KEV

non

Activités

très faible

Sources

Might our Artificial Intelligence support you?

Check our Alexa App!