Исследователи проанализировали исходный код операционной системы FreeBSD на предмет потенциальных уязвимостей и некритичных ошибок.
Разработчик системы статического анализа кода PVS-Studio Святослав Размыслов исследовал исходный код операционной системы FreeBSD на предмет потенциальных уязвимостей и некритичных ошибок. Всего эксперт обнаружил порядка тысячи серьезных предупреждений анализатора.
Размыслов установил PC-BSD и написал утилиту на C++, позволяющую сохранить рабочее окружение компиляторов на момент сборки ядра. Полученную информацию специалист использовал для получения и анализа препроцессированных файлов. Подобный способ позволил исследователю провести глубокий анализ кода и найти наиболее сложные и интересные ошибки.
В ходе анализа кода было обнаружено множество опечаток, одинаковых фрагментов и прочих ошибок в исходном коде операционной системы. Исследователь сообщил о найденных неисправностях разработчикам FreeBSD. На момент написания новости создатели операционной системы приступили к устранению найденных ошибок.
В качестве примера можно привести ошибку приоритетов операций, меняющую логику вычислений. Анализатор обнаружил проблему в следующем фрагменте кода:
int mfi_tbolt_send_frame(struct mfi_softc *sc, struct mfi_command *cm) { .... if (cdb[0] != 0x28 || cdb[0] != 0x2A) { // <=' if ((req_desc = mfi_tbolt_build_mpt_cmd(sc, cm)) == NULL) { device_printf(sc->mfi_dev, "Mapping from MFI " "to MPT Failed \n"); return 1; } } else device_printf(sc->mfi_dev, "DJA NA XXX SYSPDIO\n"); .... }
В данном случае первое условное выражение всегда истинно, и ветвь “else” никогда не получает управления.
Лечим цифровую неграмотность без побочных эффектов