CVE-2026-89664 in Linux
Résumé
par VulDB • 12/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
nfsd : libération des ACL POSIX décodées via OPEN par op_release
nfsd4_decode_createhow4() appelle nfsd4_decode_fattr4(), qui alloue des objets struct posix_acl avec compteur de références via posix_acl_alloc() et les stocke dans open->op_pacl et open->op_dpacl. Ces pointeurs doivent être libérés une fois le composé OPEN terminé.
Lorsque nfsd4_decode_open_claim4() renvoie une erreur non modifiant seqid, l'ordonnanceur (dispatcher) effectue un court-circuit avant que op_func ne s'exécute :
nfsd4_proc_compound() if (op->status && op->opnum == OP_OPEN) op->status = nfsd4_open_omfg(...) if (!seqid_mutating_err(ntohl(op->status))) return op->status; /* nfsd4_open() ne s'exécute jamais */ ... opdesc->op_release(&op->u) /* doit toujours libérer op_pacl/op_dpacl */
Avant cette modification, OP_OPEN n'avait pas de .op_release dans nfsd4_ops[], et la paire de libération résidait à l'intérieur de nfsd4_open() sur son étiquette out_err. Sur le chemin du court-circuit, nfsd4_open() n'est jamais invoqué, donc les références posix_acl fuient (leak) pour chaque composé OPEN malformé comportant des attributs createhow4 ACL POSIX valides.
Ajout de nfsd4_open_release() et câblage en tant que .op_release pour OP_OPEN. posix_acl_release() est sûr face aux valeurs NULL, donc le site de libération unique couvre à la fois le chemin normal et le court-circuit nfsd4_open_omfg. Suppression de la paire posix_acl_release() correspondante dans l'étiquette out_err de nfsd4_open() pour éviter une double libération (double-free).
La boucle du composé possède deux branches d'encodage : nfsd4_encode_operation() pour les opérations normales, et nfsd4_encode_replay() pour les opérations rejouées en v4.0. op_release n'était appelé que depuis nfsd4_encode_operation(), donc les ressources attachées à op->u fuient sur le chemin de rejeu (replay).
Déplacement de l'appel op_release() hors de nfsd4_encode_operation() et de la branche de rejeu, en le plaçant après le if-else dans nfsd4_proc_compound(). Cela donne un site d'appel unique à un endroit manifestement correct, couvrant à la fois les chemins d'encodage normal et de rejeu.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.