NixModule cargo-badge

Simple qemu-kvm wrapper to automatically test out-of-tree linux kernel modules across multiple kernel versions. The provided images all have KASAN to aide your development.

sh cargo install nixmodule

Example below running it against a single kernel, running without arguments tests against every kernel in your nixmodule-config.toml:

Pre-Built Kernels

Check nixmodule-config.toml for an example configuration using all of these images.

| Version | BzImage | Headers | LTS? | | :---: | :---: | :---: | :---: | | 5.17.2 | bZimage | Headers| | | 5.15.33 | bZimage | Headers| Yes | | 5.10.110 | bZimage | Headers| Yes | | 5.8.9 | bZimage | Headers| | | 5.4.188 | bZimage| Headers| Yes | | 4.19.237| bZimage | Headers| Yes | | 4.14.275| bZimage | Headers| Yes | | 4.9.309| bZimage | Headers| Yes | | 4.4.302| bZimage | Headers| Yes |

Pre-Built Disk Images

| Name | Link | SSH Key | | :---: | :---: | :---: | | Syzkaller Debian Buster | Image | Key
| Syzkaller Debian Stretch | Image | Key

Using Other Kernels

Use the packing script

sh KERNEL=4.14.275 ./scripts/package.sh

This builds the required bzImage and an archive linux-$VERSION-headers.tar.gz containing the headers/module info required to build an out-of-tree kernel module.

Then add the new kernel to your configuration file nixmodule-config.toml:

```toml [[kernels]] version = "4.19.237" urlbase = "https://files.sboc.dev" headers = "linux-headers/linux-4.19.237-headers.tar.gz" kernel = "linux-kernels/bzImage-linux-4.19.237" runner = "qemu-system-x8664"

[kernels.disk] name = "stretch" urlbase = "https://files.sboc.dev" path = "images/stretch/stretch.img" sshkey = "images/stretch/stretch.idrsa" ```

Using Other Disk Images

Fill out the [kernels.disk] entry for the kernel you'd like to use the new disk with:

toml [kernels.disk] name = "stretch" url_base = "https://files.sboc.dev" path = "images/stretch/stretch.img" sshkey = "images/stretch/stretch.id_rsa" boot = "/dev/sda"

Boot should contain the partition to boot from. This is passed to qemu to append as kernel arguments:

-append "console=ttyS0 root=$BOOT earlyprintk=serial net.ifnames=0 nokaslr"