Исследователи проанализировали исходный код операционной системы 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” никогда не получает управления.