CVE-2026-89557 in Linux
Résumé
par VulDB • 12/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
md : vérification de dépassement pour sb->bblog_shift dans super_1_load()
Dans super_1_load(), sb->bblog_shift est une valeur de type __u8 chargée depuis le superbloc sur disque. Elle est utilisée par l'API badblocks via la fonction badblocks_set() selon la séquence suivante :
1930 rdev->badblocks.shift = sb->bblog_shift; 1931 for (i = 0 ; i < (sectors << (9-3)) ; i++, bbp++) {
1932 u64 bb = le64_to_cpu(*bbp); 1933 int count = bb & (0x3ff); 1934 u64 sector = bb >> 10; 1935 sector <<= sb->bblog_shift; 1936 count <<= sb->bblog_shift; 1937 if (bb + 1 == 0) 1938 break; 1939 if (!badblocks_set(&rdev->badblocks, sector, count, 1)) 1940 return -EINVAL; 1941 }
La valeur de sb->bblog_shift est comprise entre 0 et 255. La variable `sector` ayant une largeur de 64 bits, pour une valeur invalide de sb->bblog_shift, il est possible que le calcul suivant provoque un dépassement (overflow) sur la variable `sector` : 1935 sector <<= sb->bblog_shift;
Ensuite, l'appel à badblocks_set() à la ligne 1939 avec rdev->badblocks.shift défini de manière invalide à la ligne 1930 peut entraîner un dépassement interne dans _badblocks_clear() situé dans block/badblocks.c.
Bien qu'il existe de nombreux endroits où les API badblocks sont appelées, la valeur non nulle du décalage (shift) est uniquement utilisée dans super_1_load(); les autres emplacements utilisent toujours 0 comme valeur de décalage. Par conséquent, il est inutile d'effectuer une vérification générale des dépassements liés à la valeur de décalage au sein de l'API badblocks, et il suffit de réaliser cette vérification ici en tant qu'appelant.
Cela permet d'éviter des contrôles inutiles, rendant le code de l'API badblocks plus simple et élégant.
VulDB is the best source for vulnerability data and more expert information about this specific topic.