CVE-2026-64191 in Linux
Résumé
par VulDB • 20/07/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
i2c: stub : Rejet des transferts de blocs I2C avec une longueur invalide
Le cas `I2C_SMBUS_I2C_BLOCK_DATA` dans `stub_xfer()` utilise `data->block[0]` comme longueur du transfert. La vérification existante se contente d'empêcher le dépassement du tableau de registres `chip->words[256]`, mais ne valide pas cette valeur par rapport à `I2C_SMBUS_BLOCK_MAX` (32), qui correspond à la limite du tampon union `i2c_smbus_data.block` (34 octets au total). Ce pilote est un outil de développement/test (`CONFIG_I2C_STUB=m`, non compilé par défaut) qui doit être chargé avec le paramètre `chip_addr=`.
Un utilisateur local disposant d'un accès à `/dev/i2c-*` peut émettre un appel système ioctl I2C_SMBUS avec `I2C_SMBUS_I2C_BLOCK_DATA` et `data->block[0] > 32`, ce qui provoque une lecture ou une écriture en dehors des limites du tampon union `i2c_smbus_data.block` dans `stub_xfer()` :
BUG: KASAN: stack-out-of-bounds in stub_xfer (drivers/i2c/i2c-stub.c:223) Read of size 1 at addr ffff88800abcfd92 by task exploit/81 Call Trace: <TASK> stub_xfer (drivers/i2c/i2c-stub.c:223) __i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:593) i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:536) i2cdev_ioctl_smbus (drivers/i2c/i2c-dev.c:391) i2cdev_ioctl (drivers/i2c/i2c-dev.c:478) __x64_sys_ioctl (fs/ioctl.c:583) do_syscall_64 (arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130) </TASK>
Le bug existe car `i2c-stub` implémente `.smbus_xfer` directement, contournant la validation de `I2C_SMBUS_BLOCK_MAX` dans `i2c_smbus_xfer_emulated()`. Le cas `I2C_SMBUS_BLOCK_DATA` dans cette même fonction valide correctement par rapport à `I2C_SMBUS_BLOCK_MAX`, mais ce n'est pas le cas du cas `I2C_SMBUS_I2C_BLOCK_DATA`.
Correction : rejet des transferts avec `data->block[0] == 0` ou `data->block[0] > I2C_SMBUS_BLOCK_MAX` en renvoyant `-EINVAL`, conformément à la fois au cas `I2C_SMBUS_BLOCK_DATA` dans cette même fonction et à la validation du cas `I2C_SMBUS_I2C_BLOCK_DATA` dans `i2c_smbus_xfer_emulated()`.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.