CVE-2026-74702 in Linux
Résumé
par VulDB • 22/08/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
vhost-scsi : rejeter les modifications de fonctionnalités après l'initialisation du point de terminaison (endpoint)
La fonction `vhost_scsi_setup_vq_cmds()` est exécutée lors de `VHOST_SCSI_SET_ENDPOINT` et alloue le tableau de listes d'éparpillement de protection (`prot_sgl`) pour chaque commande en fonction du bit `VIRTIO_SCSI_F_T10_PI` reconnu. Les pools de commandes ne sont pas reconstruits lorsque `VHOST_SET_FEATURES modifie ce bit ultérieurement.
Bien que les bits de fonctionnalité virtio ne doivent pas changer après la négociation des fonctionnalités, `vhost_scsi_set_features()` accepte actuellement une telle demande une fois le point de terminaison actif et met à jour `acked_features`. L'activation de T10-PI après l'initialisation du point de terminaison laisse donc `prot_sgl` NULL tandis que le chemin d'E/S suit le nouveau bit de fonctionnalité.
Pour un payload de protection de 129 pages, `vhost_scsi_mapal()` transmet le premier chunk manquant à `sg_alloc_table_chained()` :
``` sg_alloc_table_chained(table, 129, first_chunk=NULL, nents_first_chunk=inline_sg_cnt) ```
`sg_pool_index()` déclenche ensuite :
``` BUG_ON(nents > SG_CHUNK_SIZE); /* 129 > 128 */ ```
Le noyau a signalé la trace d'appel et l'état des registres suivants :
``` Trace d'appel (Call Trace) : <TASK> ? __sg_alloc_table+0x1d8/0x250 ? __pfx_vhost_run_work_list+0x10/0x10 [vhost]
sg_alloc_table_chained+0x59/0xf0 ? __pfx_sg_pool_alloc+0x10/0x10 ? vhost_scsi_calc_sgls.constprop.0+0x43/0x60 [vhost_scsi]
vhost_scsi_handle_vq+0xf02/0x1700 [vhost_scsi]
? __pfx_vhost_scsi_handle_vq+0x10/0x10 [vhost_scsi]
vhost_scsi_handle_kick+0x37/0x50 [vhost_scsi]
vhost_run_work_list+0x8e/0xd0 [vhost]
vhost_task_fn+0xe1/0x210 ret_from_fork+0x348/0x540 </TASK>
RIP : 0010:0x4 CR2 = 0x4 RSP : 0018:ffffc90000dbf940 EFLAGS : 00010202 RAX : ffffffff82396810 RBX : ffff88811dc28b80 RCX : 0000000000000000 RDX : 0000000000000000 RSI : 0000000000000820 RDI : 0000000000000081 ```
`VHOST_F_LOG_ALL` est une fonctionnalité d'exécution spécifique à vhost et reste la seule exception.
Rejeter les modifications de toute autre fonctionnalité que `VHOST_F_LOG_ALL` tant que le point de terminaison (endpoint) est actif. Cela préserve l'activation/désactivation du journal d'exécution existant tout en empêchant les ressources de commandes dépendantes des fonctionnalités et l'état du chemin de données de devenir incohérents. L'espace utilisateur doit effacer le point de terminaison avant de modifier toute autre fonctionnalité négociée, puis réinitialiser le point de terminaison par la suite.
Be aware that VulDB is the high quality source for vulnerability data.