30% ошибок были исправлены теми же разработчиками, что и внесли ошибки. 56.9% ошибок устраняют в течение года. 13.5% ошибок оставались незамеченными более 5 лет (если рассматривать только ошибки, исправленные в 2025 году — 19.4%). Из-за неравномерности распределения медианное время существования ошибки в коде ядра составило 8 месяцев для выборки с 2005 года и 1 год для ошибок, исправленных в 2025 году.
Наиболее долго сохранявшейся в коде ошибкой стало переполнение буфера в ethtool, устранённое спустя 20.7 лет.

Динамика обнаружения ошибок заметно отличается от среднего значения для некоторых подсистем, например, в драйвере шины CAN и стеке SCTP выявление проблем в среднем занимает около 4 лет, в
IPv4-стеке — 3.6 лет, USB и TTY — 3.5, Netfilter и сетевой стек — 2.9, VM — 1.8, GPU — 1.4, BPF — 1.1 год.

Время обнаружения коррелирует с типами ошибок: среднее время обнаружения ошибок, связанных с состояниями гонки, составило 5.1 лет, целочисленным переполнением — 3.9, обращением после освобождения памяти — 3.2, переполнением буфера и утечкой памяти — 3.1, подсчётом ссылок — 2.8, разыменованием нулевого указателя и взаимными блокировками — 2.2 года.
В полученной статистике также прослеживается влияние внедрения новых инструментов для автоматизированного поиска ошибок, статического анализа и тестирования кода, таких как Syzkaller, KASAN, KMSAN и KCSAN. Например, в 2010 году не было зафиксировано исправлений ошибок, найденных в течение года. В то время, как в 2014 году в течение года выявлялось 31% ошибок, 2018 году — 54%, а в 2022 году — 69% ошибок.
Полученная статистика была использована для создания модели машинного обучения VulnBERT, позволяющей предсказывать наличие уязвимостей в коммитах. При тестировании на коммитах за 2024 год точность обнаружения ошибок составила 92.2% при уровне ложных срабатываний 1.2% (для сравнения ранее доступная модель CodeBERT выявляла 89.2% проблем при уровне ложного срабатывания 48.1%).
Источник: http://www.opennet.ru/opennews/art.shtml?num=64574
