CVE-2026-89533 in Linuxinformação

Sumário

de VulDB • 12/09/2026

No kernel do Linux, a seguinte vulnerabilidade foi corrigida:

svcrdma: Correção da aritmética de deslocamento em read_chunk_range

svc_rdma_read_chunk_range() percorre a lista de segmentos de um Read chunk para construir uma subfaixa que começa no byte offset e abrange length bytes para um Position-Zero ou Call chunk. Dois defeitos aritméticos no loop por segmento produzem comprimentos DMA incorretos e um underflow em u32:

pcl_for_each_segment(segment, chunk) {
if (offset > segment->rs_length) {
offset -= segment->rs_length; continue; }

dummy.rs_handle = segment->rs_handle; dummy.rs_length = min_t(u32, length, segment->rs_length) - offset; dummy.rs_offset = segment->rs_offset + offset;

Primeiro, a condição de salto usa '>' em vez de '>='. Quando o offset é igual ao rs_length completo do segmento, o segmento está totalmente consumido e deveria ser ignorado (skipped), mas o loop continua para o corpo. O resultado é que dummy.rs_length se torna min_t(u32, length, rs_length) - rs_length, o que causa um underflow resultando em um u32 próximo a UINT_MAX quando length for menor do que rs_length, ou zero caso contrário.

Segundo, a fórmula de comprimento subtrai offset do resultado de min_t() ao invés de subtraí-lo de segment->rs_length antes da aplicação do limite (cap). Para offset > 0, o resíduo do segmento é rs_length - offset, não rs_length; portanto, o cap deve ser aplicado ao resíduo. Com a estruturação atual, sempre que length for menor do que rs_length - offset, o comprimento por segmento torna-se length - offset em vez de length, descartando silenciosamente bytes de offset no chunk reconstruído. Combinado com o caso de fronteira acima, isso também habilita o caminho de underflow u32, que propaga um nr_bvec enorme para svc_rdma_build_read_segment() e uma chamada multi-MiB a kmalloc_array_node() em svc_rdma_get_rw_ctxt().

Adicionalmente, svc_rdma_read_call_chunk() pode invocar esta função com length == 0 quando o último Read chunk termina exatamente no final do Call chunk. Com a correção da condição para >=, todos os segmentos são ignorados e a função retorna -EINVAL inicial, rejeitando uma solicitação válida. Retorne sucesso imediatamente quando length for zero. Além disso, interrompa o loop assim que length estiver totalmente consumido para evitar passar segmentos de comprimento zero para svc_rdma_build_read_segment().

Correção: usar '>=' para ignorar um segmento totalmente consumido; mover '- offset' para dentro de min_t() para que o cap seja aplicado ao comprimento residual do segmento; retornar sucesso para solicitações de comprimento zero; e parar a iteração quando a faixa solicitada tiver sido consumida.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsável

Linux

Reservar

11/09/2026

Divulgação

12/09/2026

Moderação

aceite

Entrada

VDB-402840

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Might our Artificial Intelligence support you?

Check our Alexa App!