If you want to contribute to the project, feel free to send a pull request following the guidelines below.
In case this is your first pull request to syzkaller, you will need to sign Google CLA and add yourself to AUTHORS/CONTRIBUTORS files in the first commit.
Extending/improving system call descriptions is always a good idea.
Unassigned issues from the bug tracker are worth doing, but some of them might be complicated.
To contribute code or syscall descriptions, at the very least you need to be able to build and run syzkaller, see the instructions here.
If you want to work on something non-trivial, please briefly describe it on the syzkaller@googlegroups.com mailing list first, so that there is an agreement on the high level approach/design and no duplication of work between contributors.
Split large changes into smaller, logically cohesive commits. Small commits are much easier and faster to review and iterate on.
Everything that can be reasonably tested should be tested.
Provide enough documentation for other users to use the new feature.
Keep the style of the code, tests, comments, docs, log/error messages consistent with the existing style.
Continuous Integration (CI) system runs a number of tests and some [opinionated] style checks. They need to pass. You can test locally with make presubmit
, if you don't have some prerequisites installed, you may use syz-env
(see below).
Commit messages should follow the following template:
dir/path: one-line description <empty line> Extended multi-line description that includes the problem you are solving and how it is solved.
dir/path
is a relative path to the main dir this commit changes (look at examples in the commit history). If several packages/dirs are significantly affected, then the following format is allowed:
dir1/path1, dir2/path2: one-line description
Though, dirs should not be included if they have only minor changes. For pervasive changes the following format is allowed:
all: one-line description
Please pay attention to punctuation. In particular:
one-line description
should not start with a Capital letter.one-line description
.Extended multi-line description
is full English sentences with Capital letters and dots.Commit message line length is limited to 120 characters.
Also:
Fixes #NNN
line into commit message (where NNN
is the issue number). This will auto-close the issue. If you need to mention an issue without closing it, add Update #NNN
.*.const
files are checked-in with the *.txt
changes in the same commit.make presubmit
and ensure that it passes before sending a PR. It may require some additional packages to be installed (try sudo make install_prerequisites
).First, you need an own git fork of syzkaller repository. Nagivate to github.com/google/syzkaller and press Fork
button in the top-right corner of the page. This will create https://github.com/YOUR_GITHUB_USERNAME/syzkaller
repository.
Checkout main syzkaller repository if you have not already. The simplest way to do it is to run git clone https://github.com/google/syzkaller
, this will checkout the repository in the current working directory.
Remember to export PATH=$GOPATH/bin:$PATH
if you have not already.
Then add your repository as an additional origin:
cd syzkaller git remote add my-origin https://github.com/YOUR_GITHUB_USERNAME/syzkaller.git git fetch my-origin git checkout -b my-branch my-origin/master
This adds git origin my-origin
with your repository and checks out new branch my-branch
based on master
branch.
git add
for all changed files, e.g. git add sys/linux/sys.txt
. You can run git status
to see what files were changed/created. When all files are added (git status
shows no files in Changes not staged for commit
section and no relevant files in Untracked files
section), run git commit
and enter commit description in your editor.make install_prerequisites
followed by make presubmit
).git push my-origin my-branch
.Compare & pull request
button, press it. Then press Create pull request
. Now your pull request should show up on pull requests page.Create pull request
button for any reason, you can create pull request manually. For that nagivate to pull requests page, press New pull request
, then compare across forks
and choose google/syzkaller
/master
as base and YOUR_GITHUB_USERNAME/syzkaller
/my-branch
as compare and press Create pull request
.my-branch
(e.g. to rebase them onto updated master) after you created a pull-request, you will need to do a force push: git push -f my-origin my-branch
.Developing syzkaller requires a number of tools installed (Go toolchain, C/C++ cross-compilers, golangci-lint, etc). Installing all of them may be cumbersome, e.g. due broken/missing packages. syz-env provides a working hermetic development environment based on a Docker container. If you don't yet have Docker installed, see documentation, in particular regarding enabling sudo-less Docker (Googlers see go/docker).
It's recommended to create an alias for syz-env
script:
alias syz-env="$(go env GOPATH)/src/github.com/google/syzkaller/tools/syz-env"
Then it can be used to wrap almost any make invocation as:
syz-env make format syz-env make presubmit syz-env make extract SOURCEDIR=$(readlink -f ~/linux)
Or other commands/scripts, e.g.:
syz-env go test -short ./pkg/csource
Or you may run the shell inside of the container with just syz-env
and look around.
To update syz-env
container to the latest version do:
docker pull gcr.io/syzkaller/env
If you do not have access to the gcr.io
registry, there is also a mirror in docker.pkg.github.com
registry. In order to use it, you need to authenticate Docker with your Github account with:
docker login https://docker.pkg.github.com
and then pull the image and retag it to the name expacted by syz-env
:
docker pull docker.pkg.github.com/google/syzkaller/env docker tag docker.pkg.github.com/google/syzkaller/env gcr.io/syzkaller/env