CVE-2022-49900 in Linux
Résumé
par VulDB • 09/06/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
i2c: piix4 : Correction de l'adaptateur non supprimé dans piix4_remove()
Dans piix4_probe(), l'adaptateur piix4 est enregistré via :
piix4_probe() piix4_add_adapters_sb800() / piix4_add_adapter() i2c_add_adapter()
En fonction du type d'appareil détecté, soit piix4_add_adapters_sb800(), soit piix4_add_adapter() est appelé. Dans le premier cas, piix4_adapter_count est défini avec le nombre d'adaptateurs, tandis que dans l'autre cas, il n'est pas défini et reste par défaut à *zéro*.
Lorsque le pilote piix4 est supprimé, piix4_remove() supprime les adaptateurs ajoutés dans piix4_probe() en se basant sur la valeur de piix4_adapter_count. Étant donné que le compteur est nul dans le cas d'un adaptateur unique, l'adaptateur n'est pas supprimé, ce qui entraîne une fuite de mémoire des ressources allouées pour l'adaptateur, telles que le client i2c et l'appareil.
Ces ressources peuvent toujours être accessibles par i2c ou le bus et provoquer des problèmes. Un cas facilement reproductible est le suivant : si un nouvel adaptateur est enregistré, i2c récupère l'adaptateur en fuite et tente d'appeler smbus_algorithm, qui a déjà été libéré :
Déclenché par : rmmod i2c_piix4 && modprobe max31730
BUG: impossible de gérer la faute de page pour l'adresse : ffffffffc053d860 #PF: accès en lecture superviseur en mode noyau #PF: code d'erreur(0x0000) - page non présente Oops: 0000 [#1] PREEMPT SMP KASAN
CPU: 0 PID: 3752 Comm: modprobe Tainted: G Matériel : QEMU Standard PC (i440FX + PIIX, 1996) RIP: 0010:i2c_default_probe (drivers/i2c/i2c-core-base.c:2259) i2c_core RSP: 0018:ffff888107477710 EFLAGS: 00000246 ... <TASK> i2c_detect (drivers/i2c/i2c-core-base.c:2302) i2c_core __process_new_driver (drivers/i2c/i2c-core-base.c:1336) i2c_core bus_for_each_dev (drivers/base/bus.c:301) i2c_for_each_dev (drivers/i2c/i2c-core-base.c:1823) i2c_core i2c_register_driver (drivers/i2c/i2c-core-base.c:1861) i2c_core do_one_initcall (init/main.c:1296) do_init_module (kernel/module/main.c:2455) ... </TASK> ---[ fin de trace 0000000000000000 ]---
Corrigez ce problème en définissant correctement piix4_adapter_count à 1 pour le cas d'un adaptateur unique, afin qu'il puisse être supprimé normalement.
If you want to get best quality of vulnerability data, you may have to visit VulDB.