Skip to content

Gao-Zuin/Syssec-proj

Repository files navigation

MaliGPU

本地 Mali GPU 驱动分析与复现工作区,用于研究 docs/ 目录下的 CVE 笔记。仓库有意将源笔记、脚本、PoC 和小型辅助文件纳入 git 管理,而较大的外部源码树和构建产物则在 clone 或 pull 后在本地重新生成。

目录结构

docs/      详细环境笔记与 CVE 复现路线
scripts/   环境检查、源码引导、构建与 QEMU 辅助脚本
pocs/      用户态与内核态概念验证源码
models/    小型本地生命周期模型
tools/     辅助模块与工具
sources/   外部驱动/内核源码树,大部分仅存于本地
build/     生成的内核、模块、initramfs 镜像与二进制文件
logs/      生成的构建/QEMU/模型日志

sources/build/ 以及 logs/ 中的大部分内容不属于可移植的项目状态。磁盘占用过高时可以删除并重新生成。

Clone 或 Pull 后的操作

从仓库根目录执行以下命令。

1. 安装宿主机依赖

脚本依赖于具备常用内核构建和 QEMU 工具的 Linux 环境:

sudo apt update
sudo apt install -y \
  git gcc clang make lld llvm bc bison flex libssl-dev libelf-dev dwarves \
  qemu-system-arm qemu-system-x86 qemu-user gcc-aarch64-linux-gnu \
  gdb-multiarch python3 python3-pip python3-venv cmake ninja-build \
  pkg-config jq ccache busybox cpio

检查当前机器环境:

scripts/check_env.sh

缺失的工具需在本地安装,它们不会存储在仓库中。

2. 重新创建外部源码树

获取脚本所使用的 Mali 驱动源码镜像:

scripts/bootstrap_mali_sources.sh

这将在 sources/ 下重新填充本地源码目录,如 sources/nest-mali-driver/ 及其他外部镜像。如果某个源码树已存在,脚本会打印其远程地址和当前 commit,而非覆盖它。

某些较早的本地实验可能引用额外的源码树,例如 sources/nest-mali-driver-full/。这些是较大的本地检出,需要时可通过相同的上游或本地存档恢复特定版本。

3. 重新创建 Linux 5.10 KASAN 构建树

QEMU/无 Mali 路径默认使用一个预配置的内核构建目录:

build/linux-5.10-kasan

该目录是生成的,已被有意忽略。在全新 clone 之后,必须先重新创建它才能运行 QEMU 模块脚本。典型流程如下:

mkdir -p sources build
# 本地提供 linux-5.10.tar.xz,或从 kernel.org 下载。
tar -xf sources/linux-5.10.tar.xz -C sources
mv sources/linux-5.10 sources/linux-5.10-kasan-src

make -C sources/linux-5.10-kasan-src O="$PWD/build/linux-5.10-kasan" x86_64_defconfig
sources/linux-5.10-kasan-src/scripts/config --file build/linux-5.10-kasan/.config \
  -e KASAN \
  -e KASAN_INLINE \
  -e DEBUG_INFO \
  -e MODULES
make -C sources/linux-5.10-kasan-src O="$PWD/build/linux-5.10-kasan" olddefconfig
make -C sources/linux-5.10-kasan-src O="$PWD/build/linux-5.10-kasan" -j"$(nproc)"

如果你本地已有兼容的预配置内核树,可以通过 KDIR=/path/to/kernel/build 直接使用,而无需重建这个默认目录。

4. 重新构建 Mali 内核模块

大多数 QEMU 辅助脚本期望 mali_kbase.ko 是针对预配置内核树构建的。示例:

KDIR=build/linux-5.10-kasan \
  scripts/mali_qemu_no_mali/build_mali_no_mali_module.sh bifrost r25p0

KDIR=build/linux-5.10-kasan \
  scripts/mali_qemu_no_mali/build_mali_no_mali_module.sh bifrost r44p0

MALI_CSF_SUPPORT=y KDIR=build/linux-5.10-kasan \
  scripts/mali_qemu_no_mali/build_mali_no_mali_module.sh valhall r44p0

驱动树中生成的 .ko.o.cmdModule.symversmodules.order 文件已被忽略,应在本地重新构建。

5. 重新构建 PoC、Initramfs 镜像与日志

PoC 二进制文件、initramfs 目录、压缩的 cpio 镜像以及 QEMU 日志都是在 build/logs/ 下生成的产物。

使用运行脚本为特定实验重新生成所需内容:

scripts/mali_qemu_no_mali/run_cve_2021_28663_r25p0.sh
scripts/mali_qemu_no_mali/run_cve_2023_34970_r44p0_uapi_probe.sh
scripts/mali_success_proofs/run_controlled_34970_r44_uaf.sh
scripts/build_and_run_models.sh

关于当前的复现状态、预期日志和报告说明,请参阅 docs/环境配置与复现路线.md

可以安全删除的内容

以下是生成或本地恢复的内容,可以删除以释放空间:

rm -rf build/
find logs -type f -name '*.log' -delete
find sources \( -name '*.o' -o -name '*.ko' -o -name '*.mod.c' -o -name '.*.cmd' \) -delete

仅在确认可以重新创建时才删除展开的内核树:

rm -rf sources/linux-5.10-kasan-src

不要删除 docs/scripts/pocs/models/tools/,除非你有意移除项目源文件。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors