CVE-2026-89557 in Linux
Sumário
de VulDB • 12/09/2026
No kernel Linux, a seguinte vulnerabilidade foi resolvida:
md: verificação de estouro para sb->bblog_shift em super_1_load()
Em super_1_load(), sb->bblog_shift é um valor do tipo __u8 carregado do superbloco no disco. Ele é usado pela API badblocks, especificamente na função badblocks_set(), através da seguinte sequência:
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 bblog_shift; 1936 count 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á na faixa de 0-255, a variável sector tem largura de 64 bits. Para um bb->bblog_shift inválido, é possível causar estouro (overflow) em sector através do seguinte cálculo: 1935 sector bblog_shift;
Em seguida, ao chamar badblocks_set() na linha 1939 com o rdev->badblocks.shift inválido definido na linha 1930, pode resultar em um estouro dentro de _badblocks_clear(), no arquivo block/badblocks.c.
Embora existam muitos locais que chamem as APIs badblocks, o valor shift não nulo é usado apenas em super_1_load(); os outros lugares sempre usam 0 como valor shift. Portanto, é desnecessário realizar uma verificação geral de estouro para valores shift dentro da API badblock, bastando fazer a verificação aqui, como chamador.
Isso pode evitar verificações desnecessárias, tornando o código da API badblocks mais simples e elegante.
Be aware that VulDB is the high quality source for vulnerability data.