Env for kernel fuzzing based on Ubuntu 20.04/22.04/24.04/26.04 with Compilers and Syzkaller.
848
qgrain/kernel-fuzz provides Docker images for Linux kernel fuzzing research
with QEMU/KVM, syzkaller-oriented dependencies, managed compiler toolchains,
and ready-to-clone QEMU guest image templates.
The Ubuntu version in each tag is the container userspace version. It is not the kernel-under-test version; the target kernel is built and booted inside a QEMU guest.
| Tag | Ubuntu | GCC | LLVM/Clang | Go | Conda Python | Guest template | Notes |
|---|---|---|---|---|---|---|---|
latest | 24.04 | 14.2.0 | 21.1.8 | 1.26.5 | 3.12 | Debian Trixie | Alias of 2404_v1; recommended default |
2004_v2 | 20.04 | 12.3.0 | 17.0.6 | 1.24.8 | 3.10 | Debian Bullseye | Legacy compatibility image |
2204_v3 | 22.04 | 13.4.0 | 19.1.7 | 1.24.8 | 3.10 | Debian Bullseye | Stable older-userspace image |
2404_v1 | 24.04 | 14.2.0 | 21.1.8 | 1.26.5 | 3.12 | Debian Trixie | Recommended for most new experiments |
2604_v1 | 26.04 | 15.3.0 | 22.1.8 | 1.26.5 | 3.14 | Debian Trixie | Newest userspace/toolchain image |
All current images are linux/amd64 images for x86_64 QEMU/KVM workflows.
docker pull qgrain/kernel-fuzz:2404_v1
docker run --init -d --name kernel-fuzz \
--privileged \
--ipc=host \
-p XXXXX:22 \
-v /HOST/PATH/KERNELS:/root/kernels \
qgrain/kernel-fuzz:2404_v1 sleep infinity
docker exec -it kernel-fuzz bash
Use latest if you want the recommended default:
docker run -it --rm --privileged qgrain/kernel-fuzz:latest bash
--privileged is recommended for syzqemuctl guest image handling and for
exposing host KVM acceleration to QEMU.
/root/images by syzqemuctl.kernel-fuzz environment./root/software/goX.Y.Z and GOPATH=/root/software/gopath./root/fuzzers/syzkaller-7bitHASH-YYYYMMDD.The bundled syzkaller checkout is only a convenience source tree. It is not pre-built and is not mandatory. Build syzkaller, the kernel under test, and any experiment-specific components inside your own working container.
Common development environment variables are centralized in /root/.bash_env.
Both interactive shells and automation commands such as:
docker exec kernel-fuzz bash -lc 'go version && clang --version'
load the same Go, cvm, Conda, compiler, and fzf paths.
No proxy is baked into the image. If your environment needs a proxy, pass it at container runtime or configure it inside your own container only:
docker run -e http_proxy=http://HOST:PORT -e https_proxy=http://HOST:PORT ...
sshd starts by default, but the root password is locked. To enable password
SSH for a container you control:
docker exec -it kernel-fuzz passwd
ssh -p XXXXX root@IP
Alternatively, add your own /root/.ssh/authorized_keys. To disable sshd for
local docker exec-only containers:
docker run -e KERNEL_FUZZ_START_SSHD=0 ...
The default image template is stored in /root/images/image-template. If you
mount an empty volume over /root/images, the embedded template is hidden and
the entrypoint will try to initialize a replacement template. That fallback
requires suitable privileges and network access to the Debian mirrors.
Guest SSH key material inside the template is disposable fuzzing infrastructure, not a secret for protecting valuable or networked guests.
Dockerfiles, build scripts, and verification notes are maintained at:
https://github.com/QGrain/kernel-fuzz-docker-images
Detailed image contents and configuration inventory:
https://github.com/QGrain/kernel-fuzz-docker-images/blob/main/docs/image-contents.md
Release images include OCI labels for source, version, base image, and Git revision. Ubuntu base images are digest-pinned, but apt packages and Debian guest packages are still resolved at build time, so the images are not bit-for-bit package-level reproducible.
kernel-fuzz-build:* helper images as public release images.Content type
Image
Digest
sha256:946b5620a…
Size
3.3 GB
Last updated
24 days ago
docker pull qgrain/kernel-fuzz