【发布时间】:2020-03-02 04:15:10
【问题描述】:
我正在努力编译 Linux 内核,以便在启用 KASAN 和 KCOV 的 AOSP 中使用。然后我打算将其刷入 Pixel 2 XL (taimen) 并使用 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 构建内核(失败)
- 要更改内核配置符号,请在 build/build.config 中编辑
POST_DEFCONFIG_CMDS- 从https://source.android.com/setup/build/building-kernels#customize-config复制
- 根据需要进行修改,使用
-d禁用,-e启用配置选项 - 结果:
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)
}
$ build/build.sh -j8
但是之后
CHK include/generated/compile.h
我对各种 asan 符号有许多未定义的引用错误,例如
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.
真的不知道从这里去哪里以及一般出了什么问题?
非常感谢任何帮助!
更新:起初似乎使用gcc 而不是clang 似乎可以解决问题。手机启动正常,按钮工作,但触摸屏没有响应。我正在调查原因...
【问题讨论】:
标签: android linux kernel android-source address-sanitizer