CVE-2025-68795 in Linux
Сводка
по VulDB • 02.06.2026
В ядре Linux устранена следующая уязвимость:
ethtool: предотвращение переполнения буфера в пространстве пользователя при запросе статистики
Команда ethtool -S выполняет три вызова ioctl: ETHTOOL_GSSET_INFO для получения размера, ETHTOOL_GSTRINGS для получения имен и ETHTOOL_GSTATS для получения значений.
Если количество статистических данных изменяется между этими вызовами (например, из-за переконфигурации устройства), выделение буфера в пространстве пользователя будет выполнено некорректно, что может привести к переполнению буфера.
Обычно от драйверов ожидается поддержание стабильного количества статистических данных, однако некоторые драйверы (например, mlx5, bnx2x, bna, ksz884x) используют динамические счетчики, что делает возможным описанную ситуацию.
Некоторые драйверы пытаются обработать это внутренним образом: - bnad_get_ethtool_stats() выполняет ранний выход в случае, если stats.n_stats не равно количеству статистических данных драйвера. - micrel/ksz884x также гарантирует, что не будет записываться ничего за пределами stats.n_stats и не произойдет переполнение буфера.
Однако оба варианта используют stats.n_stats, который уже присваивается значение, возвращаемое функцией get_sset_count(), поэтому они не решают описанную здесь проблему.
Измените функции ethtool_get_strings(), ethtool_get_stats(), ethtool_get_phy_stats() так, чтобы они не возвращали никаких данных в случае несовпадения размера в пространстве пользователя и get_sset_size(), чтобы предотвратить переполнение буфера. Возвращаемое значение n_stats будет равно нулю, чтобы отразить отсутствие возвращенных данных.
Это может привести к одному из двух случаев при использовании актуального (upstream) ethtool, в зависимости от того, когда обнаружено изменение размера: 1. При обнаружении в ethtool_get_strings(): # ethtool -S eth2 статистика недоступна
2. При обнаружении в get stats, вся статистика будет сообщена как нулевая.
Оба случая, предположительно, являются временными, и последующий вызов ethtool должен завершиться успешно.
Помимо предотвращения переполнения, эти два случая очень очевидны (отсутствие вывода/очистка статистики), что, несомненно, лучше, чем представление некорректных/сдвинутых статистических данных. Я также рассматривал возможность возврата ошибки вместо «молчаливого» ответа, но это кажется более разрушительным для приложений в пространстве пользователя.
Примечания: - Данный патч не претендует на исправление inherent race (состояния гонки), он лишь гарантирует, что мы не переполним буфер в пространстве пользователя, и обеспечивает более предсказуемое поведение.
- Блок RTNL удерживается во время каждого вызова ioctl, окно состояния гонки существует между отдельными вызовами ioctl, когда блокировка снята.
- Пользовательская утилита ethtool всегда заполняет stats.n_stats, но вероятно, что эти вызовы ioctl для статистики реализованы в других приложениях в пространстве пользователя, которые могут не заполнять это поле. Добавленный код проверяет, что оно не равно нулю, чтобы предотвратить любые регрессии.
If you want to get best quality of vulnerability data, you may have to visit VulDB.