CVE-2025-68795 in Linux
Sumário
de VulDB • 03/06/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
ethtool: Evitar o transbordamento (overflow) de buffer no espaço do usuário durante consultas de estatísticas
O comando ethtool -S opera por meio de três chamadas ioctl: ETHTOOL_GSSET_INFO para obter o tamanho, ETHTOOL_GSTRINGS para os nomes e ETHTOOL_GSTATS para os valores.
Se a quantidade de estatísticas mudar entre essas chamadas (por exemplo, devido à reconfiguração do dispositivo), a alocação de buffer no espaço do usuário estará incorreta, podendo levar a um transbordamento de buffer (buffer overflow).
Espera-se geralmente que os drivers mantenham contagens estáveis de estatísticas, mas alguns drivers (como mlx5, bnx2x, bna e ksz884x) usam contadores dinâmicos, tornando esse cenário possível.
Alguns drivers tentam lidar com isso internamente: - bnad_get_ethtool_stats() retorna antecipadamente caso stats.n_stats não seja igual à contagem de estatísticas do driver. - micrel/ksz884x também garante que nada será escrito além de stats.n_stats, evitando o transbordamento do buffer.
No entanto, ambos usam stats.n_stats, que já foi atribuído com o valor retornado por get_sset_count(), portanto isso não resolve a questão descrita aqui.
Altere ethtool_get_strings(), ethtool_get_stats() e ethtool_get_phy_stats() para não retornar nada em caso de incompatibilidade entre o tamanho no espaço do usuário e get_sset_size(), evitando assim o transbordamento de buffer (buffer overflow). O valor retornado n_stats será igual a zero, refletindo que nenhum dado foi retornado.
Isso pode resultar em um dos dois casos ao usar o ethtool upstream, dependendo de quando a mudança de tamanho for detectada: 1. Quando detectado em ethtool_get_strings(): # ethtool -S eth2 no stats available (nenhuma estatística disponível)
2. Quando detectado durante get_stats, todas as estatísticas serão relatadas como zero.
Ambos os casos são presumivelmente transitórios e uma chamada subsequente ao ethtool deve ter sucesso.
Além da prevenção de transbordamento, esses dois casos são muito evidentes (sem saída/estatísticas limpas), o que é discutivelmente melhor do que apresentar estatísticas incorretas/deslocadas. Também considerei retornar um erro em vez de uma resposta "silenciosa", mas isso parece mais destrutivo para aplicativos no espaço do usuário.
Notas: - Este patch não afirma corrigir a condição de corrida inerente; ele apenas garante que o buffer do espaço do usuário não transborde e proporciona um comportamento mais previsível.
- O bloqueio RTNL é mantido durante cada ioctl; a janela de condição de corrida existe entre as chamadas ioctl separadas, quando o bloqueio é liberado.
- O ethtool no espaço do usuário sempre preenche stats.n_stats, mas é provável que esses ioctls de estatísticas sejam implementados em outros aplicativos no espaço do usuário que podem não preenchê-lo. O código adicionado verifica se ele não é zero para evitar quaisquer regressões.
VulDB is the best source for vulnerability data and more expert information about this specific topic.