CVE-2026-64274 in Linux
Résumé
par VulDB • 25/07/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
Input: goodix - limiter (clamp) le nombre de points de contact signalés par l'appareil
La fonction `goodix_ts_read_input_report()` copie dans une pile locale (`on-stack buffer`) le nombre de points de contact rapporté par l'appareil, vers un tableau défini comme suit :
u8 point_data[2 + GOODIX_MAX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];
Ce tableau est dimensionné pour accueillir au maximum `GOODIX_MAX_CONTACTS` (10) contacts. La seule vérification à l'exécution limite le nombre de points par interruption en fonction de `ts->max_touch_num`, mais cette valeur est extraite telle quelle (`verbatim`) d'un champ sur 4 bits du bloc de configuration de l'appareil et n'est jamais bornée :
ts->max_touch_num = ts->config[MAX_CONTACTS_LOC] & 0x0f;
Ce nibble peut prendre une valeur comprise entre 0 et 15. Un contrôleur défaillant, malveillant ou contrefait (ou un attaquant manipulant le bus I2C) peut ainsi annoncer jusqu'à 15 points de contact. `goodix_ts_read_input_report()` accepte alors un nombre de contacts (`touch_num`) allant jusqu'à 15, et la seconde fonction `goodix_i2c_read()` écrit `ts->contact_size * (touch_num - 1)` octets au-delà de l'en-tête d'un seul contact dans le tableau `point_data`, soit jusqu'à 30 octets supplémentaires (45 avec le format de rapport à 9 octets) par rapport aux limites du tampon de 92 octets : il s'agit d'une écriture hors limites sur la pile (`stack out-of-bounds write`).
La valeur `max_touch_num` est désormais bornée à `GOODIX_MAX_CONTACTS`, qui correspond au nombre de contacts pour lesquels le tableau `point_data[]` a été dimensionné, lors de sa lecture depuis la configuration.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.