Я пытаюсь скомпилировать ядро Linux для использования в AOSP с включенным KASAN & KCOV. Затем я намереваюсь прошить его на Pixel 2 XL (таймень) и использовать syzkaller для его размытия.
Вот что я сделал:
1. Сборка неизмененного ядра (работает)
Моя ссылка: https://source.android.com/setup/build/building-kernels
- Определить ветку ...
android-msm-wahoo-4.4-pie-qpr2
$ repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-wahoo-4.4-pie-qpr2
$ repo sync -j8 -c
$ build/build.sh -j8
- Подключение телефона через USB
$ adb reboot bootloader
$ fastboot boot out/android-msm-wahoo-4.4/dist/Image.lz4-dtb
(Работает нормально)
2. Сборка ядра с помощью KASAN & KCOV (ошибка)
- Чтобы изменить символы конфигурации ядра, отредактируйте
POST_DEFCONFIG_CMDS
в build / build.config
POST_DEFCONFIG_CMDS="check_defconfig && update_debug_config"
function update_debug_config() {
${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
-d CONFIG_KERNEL_LZ4 \
-e CONFIG_KASAN \
-e CONFIG_KASAN_INLINE \
-e CONFIG_KCOV \
-e CONFIG_SLUB \
-e CONFIG_SLUB_DEBUG \
--set-val FRAME_WARN 0
(cd ${OUT_DIR} && \
make O=${OUT_DIR} $archsubarch CC=${CC} CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
}
Но после CHK include/generated/compile.h
я получаю много неопределенных ошибок ссылок на различные символы асан, например undefined reference to __asan_alloca_poison
.
Я провел некоторое исследование и прочитал о добавлении-fsantitize=address
и -shared-libasan
(или -shared-libsan
) до CFLAGS
И LDFLAGS
. Я сделал это (для этого мне пришлось жестко закодировать его в build/build.sh
, разве нет более удобного способа?), Но безрезультатно:
Я закончил с aarch64-linux-android-ld: -f may not be used without -shared
.
Итак, я попытался прочитать флаг ld -shared
и добавить его к LDFLAGS
(больше похоже на предположение). В результате aarch64-linux-android-ld: -r and -shared may not be used together
.
Неужели не знаете, куда идти дальше и что вообще не так?
Любая помощь действительно ценится!