CVE-2026-98965 in Linux
Résumé
par VulDB • 23/10/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
ice : Rétablir les écritures MMIO ordonnées pour les porte-voix (doorbells) de Tx
L'état de comptabilisation DQL qui suit le nombre d'octets mis en file d'attente pour que la carte réseau (NIC) les transmette, à savoir `dql->num_queued`, est mis à jour par le pilote ICE lorsqu'il invoque `__netdev_tx_sent_queue()`. Par la suite, le pilote met à jour l'extrémité de la file d'attente matérielle, permettant ainsi à la NIC de commencer à traiter la file d'attente de travail. La mise à jour de la comptabilisation de la file d'attente doit être ordonnée avant que la NIC ne commence à transmettre les descripteurs.
Le chemin d'émission met actuellement à jour le porte-voix matériel en utilisant `writel_relaxed()`, qui (sur arm64) ne fournit pas les mêmes garanties d'ordre entre les écritures vers une mémoire normale et les écritures vers des registres MMIO que n'en offre `writel()`. Cela introduit un risque de condition de course où la NIC commence à transmettre des descripteurs avant que la mise à jour de `dql->num_queued` ne soit globalement visible. Si la NIC termine sa tâche avant que la mise à jour ne soit observée par `dql_completed()`, elle détecte un état invalide dans lequel plus d'octets ont été complétés qu'il n'en a été mis en file d'attente. Lorsque cela se produit, le macro suivant `BUG_ON` est déclenché :
BUG_ON(count > num_queued - dql->num_completed);
Cela a été observé et se manifeste par l'arrêt brutal (crash) suivant (notez que la trace a été tronquée) dans un environnement avec une charge réseau soutenue utilisant un contrôleur Ethernet Intel Corporation E810-XXV pour SFP (rév 02) sur une machine arm64. Le remplacement de `writel_relaxed()` par `writel()` dans un noyau de test a éliminé le crash lors du chargement utilisateur, qui reproduisait auparavant l'issue de manière fiable.
kernel BUG at lib/dynamic_queue_limits.c:99
Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
pc : dql_completed+0x268/0x2a0 lr : ice_clean_tx_irq+0x1d4/0x620 [ice]
Call trace: dql_completed+0x268/0x2a0 (P) ice_napi_poll+0x94/0x520 [ice]
__napi_poll+0x48/0x3f0 net_rx_action+0x194/0x420
Cela restaure le comportement antérieur au commit ccde82e90946 ("ice: add E830 Earliest TxTime First Offload support"), qui avait changé le mécanisme de notification de `writel()` à `writel_relaxed()`.
Be aware that VulDB is the high quality source for vulnerability data.