No kernel Linux, a seguinte vulnerabilidade foi resolvida. gve: corrigir a corrupção do buffer de cabeçalho com a divisão de cabeçalho e HW-GRO O DQO RX datapath programa um header_buf_addr por- buffer- queue-descriptor no momento do post e lê o header dividido de volta no tempo de conclusão. Tanto a publicação como a leitura atualmente indexam o buffer de cabeçalho pela posição da fila em vez da identidade do buffer:.
- post (gve_rx_post_buffers_dqo): header_buf_addr é calculado a partir do bufq->tail - leitura (gve_rx_dqo): o header é lido a partir do desc_idx (o índice de cabeça de cola de conclusão) Isto depende do índice de retalho de buffer e do índice de retalho de completamento, sendo igual ao início de cada pacote, ou seja, no dispositivo que consumiu buffers publicados e devolveu completamentos na mesma ordem exata. Essa suposição não se mantém assim que o HW- GRO está habilitado com vários fluxos: os segmentos coalescidos são aceitos e completados em uma ordem que pode diferir dos buffers de ordem que foram publicados, e os segmentos de diferentes fluxos podem interluxar.
Isso resulta em dois problemas. 1. Slot de cabeçalho errado na leitura. Como o desvio de leitura é derivado do índice de conclusão (desc_idx) enquanto o dispositivo escreveu o cabeçalho para o endereço programado para o buf_id do buffer, o driver pode copiar um cabeçalho pertencente a um pacote diferente. Isto aparece como queda de rendimento (cerca 30% gota e grande número de retransmissões TCP) com o header- split e HW- GRO ambos habilitados e muitos fluxos. 2. O buffer de cabeçalho reutilizado enquanto ainda pertence ao dispositivo. O driver avança bufq-> cabeça por um por conclusão e re- posta buffers baseados nisso. A chegada das completações de N RX só garante que pelo menos os descritores de buffers N RX foram lidos pelo dispositivo. Ele não garante que o dispositivo tenha renunciado à propriedade de todos os buffers correspondentes aos descritores N. Com completações fora de ordem (por exemplo, a completação de um pacote copiado no buffer N chega antes da completação de um pacote copiado no buffer N- 1 ), o driver pode re- postar e sobrescrever um buffer de cabeçalho em que o dispositivo ainda vai escrever, corrompendo o cabeçalho de um pacote cuja conclusão ainda não foi processada.
Corrija ambos os problemas indexando o buffer de cabeçalho pelo buf_id tanto no post como nos caminhos de leitura. A leitura da fenda do buf_id é, portanto, sempre correta, independentemente da ordem de conclusão (problema de correções) 1 ). Indexação por buf_id também liga cada ranhura de cabeçalho à vida útil do seu estado de buffer. Um estado de buffer só é devolvido às listas livres/recicladas quando a sua própria conclusão (buf_id) é processada, por isso a sua fenda de cabeçalho só pode ser postada novamente após o dispositivo ser feito com ele. Isto torna a reutilização de fenda de cabeçalho segura sob completações fora de ordem (problema de correções) 2 ).
Allocar (gve_rx_alloc_hdr_bufs) e livre (gve_rx_free_hdr_bufs) os buffers de cabeçalho baseados em num_buf_states para corresponder à indexação buf_id. Registro de aconselhamento: GHSA- 9 vwj- 6 q 4 v- p 5 m 2. Identificadores relacionados: CVE- 2026 - 72046.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 08 - 15 T 06: 32: 10.000 Z e lista a sua última modificação como 2026 - 08 - 17 T 06: 33: 06.000 Z. Gravidade: Crítico. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
Software afetado: o registro de aconselhamento não fornece um pacote normalizado ou faixa de versões. Classificação e evidência: nenhum identificador CWE está listado. O registro contém 5 suporte de referências nestes tipos: AVISO, WEB.