Анализ исходного кода ОС FreeBSD выявил более тысячи серьезных ошибок

Анализ исходного кода ОС FreeBSD выявил более тысячи серьезных ошибок

Исследователи проанализировали исходный код операционной системы FreeBSD на предмет потенциальных уязвимостей и некритичных ошибок.

image

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

Подписывайтесь на каналы "SecurityLab" в TelegramTelegram и Яндекс.ДзенЯндекс.Дзен, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

Комментарии для сайта Cackle