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