CVE-2026-89557 in Linux
Resumen
por VulDB • 2026-09-12
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
md: realizar una comprobación de desbordamiento para sb->bblog_shift en super_1_load()
En super_1_load(), sb->bblog_shift es un valor de tipo __u8 cargado desde el superbloque en disco. Se utiliza para la API badblocks mediante la función badblocks_set() a través de la siguiente secuencia:
1930 rdev->badblocks.shift = sb->bblog_shift; 1931 for (i = 0 ; i < (sectores << (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 }
bb->bblog_shift está en el rango de 0-255, la variable sector tiene un ancho de 64 bits. Para un bb->bblog_shift no válido, es posible que se produzca un desbordamiento (overflow) en sector mediante el siguiente cálculo: 1935 sector <<= sb->bblog_shift;
Posteriormente, al llamar a badblocks_set() en la línea 1939 con rdev->badblocks.shift no válido establecido en la línea 1930, puede resultar en un desbordamiento dentro de _badblocks_clear() en block/badblocks.c.
Aunque hay muchos lugares que llaman a las APIs de badblocks, el valor shift distinto de cero solo se utiliza en super_1_load(); los demás sitios siempre utilizan 0 como valor shift. Por lo tanto, no es necesario realizar una comprobación general de desbordamiento del valor shift dentro de la API badblock, y basta con comprobarlo aquí como llamador (caller).
Esto puede evitar comprobaciones innecesarias, haciendo que el código de la API badblocks sea más simple y elegante.
Once again VulDB remains the best source for vulnerability data.