Методика проведения статического анализа ядра Linux (версия m10)
В рамках данной методики предполагается использование инструмента Svace версии 4.0.250113.
В предположении, что ядро версии 5.10.234 собирается в конфигурации, заранее размещённой в файле /XXX/build/.config, при помощи команды:
make ARCH=arm64 HOSTCC=gcc \
CROSS_COMPILE=aarch64-linux- \
CROSS_COMPILE_COMPAT=arm-linux-gnueabi- \
O=/XXX/build -Clinux-src Image modules
для проведения статического анализа ядра необходимо выполнить следующую последовательность команд:
$ svace init
$ svace build --clear-build-dir bash -c \
"make ARCH=arm64 CROSS_COMPILE=aarch64-linux- O=/XXX/build Image modules"
$ svace config GROUP_RESULTS_OF_STAT_CHECKERS false
$ svace config GROUP_RESULTS_OF_BUFFER_OVERFLOW.PROC false
$ svace config GROUP_RESULTS_OF_UNCHECKED_FUNC_RES.STAT false
$ svace config GROUP_RESULTS_OF_DEREF_OF_NULL.RET.STAT false
$ svace config GROUP_RESULTS_OF_NO_LOCK.STAT.EX false
$ svace config GROUP_RESULTS_OF_NO_LOCK.GUARD false
$ svace warning NEGATIVE_CODE_ERROR false
$ svace warning SIZEOF_POINTER_TYPE.STRICT true
$ svace warning BUFFER_OVERFLOW.LEN true
$ svace warning BUFFER_SHIFT true
$ svace warning DEREF_OF_NULL.RET.ALLOC true
$ svace analyze
Эти шаги используют настройки инструмента по умолчанию за исключением следующих отличий:
- отключаются опции группировки предупреждений статистических детекторов;
- отключается проверка
NEGATIVE_CODE_ERROR; - дополнительно активируются проверки
SIZEOF_POINTER_TYPE.STRICT,BUFFER_OVERFLOW.LEN,BUFFER_SHIFT,DEREF_OF_NULL.RET.ALLOC.
После завершения статического анализа для загрузки его результатов в развёрнутый сервер Svacer необходимо выполнить следующие шаги:
$ svacer import \
--pathPrefix "/path-to/linux-src:" \
--project linux --branch linux-5.10.y \
--snapshot "m10-v5.10.234 arm64 myconfig $(date '+%F')" .
$ svacer upload --host svacer.mycompany.ru --port 8080
Опция --pathPrefix обеспечивает выполнение локального импорта снимка с нормализацией путей в дереве исходного кода.