aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/pkg/fuzzconfig
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-09-18 17:36:53 +0200
committerTaras Madan <tarasmadan@google.com>2025-10-07 15:25:13 +0000
commit99ed12e158687b7aba55eac142d6bad3f147d029 (patch)
treea9809d7c5d60f45b805e0346a9a543ba0651a9e1 /syz-cluster/pkg/fuzzconfig
parent790f0ffe2224829b20e4dc6556c090c503e1d161 (diff)
syz-cluster: rewrite fuzz config generation
Instead of a predefined set of manually written syz-manager configs, construct it dynamically from different bits. During triage, select not just one, but all matching fuzzer configurations and then merge them together.
Diffstat (limited to 'syz-cluster/pkg/fuzzconfig')
-rw-r--r--syz-cluster/pkg/fuzzconfig/base.cfg21
-rw-r--r--syz-cluster/pkg/fuzzconfig/generate.go188
-rw-r--r--syz-cluster/pkg/fuzzconfig/generate_test.go79
-rw-r--r--syz-cluster/pkg/fuzzconfig/patched.cfg10
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.base.cfg90
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.patched.cfg90
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.base.cfg73
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.patched.cfg73
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/default.base.cfg49
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/default.patched.cfg49
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/fs.base.cfg168
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/fs.patched.cfg168
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.base.cfg63
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.patched.cfg63
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.base.cfg57
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.patched.cfg57
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/net.base.cfg118
-rw-r--r--syz-cluster/pkg/fuzzconfig/testdata/singular/net.patched.cfg118
18 files changed, 1534 insertions, 0 deletions
diff --git a/syz-cluster/pkg/fuzzconfig/base.cfg b/syz-cluster/pkg/fuzzconfig/base.cfg
new file mode 100644
index 000000000..add1ba131
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/base.cfg
@@ -0,0 +1,21 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "image": "/base/image",
+ "syzkaller": "/syzkaller",
+ "workdir": "/workdir",
+ "type": "qemu",
+ "procs": 3,
+ "sandbox": "none",
+ "experimental": {"cover_edges": false},
+ "vm": {
+ "count": 3,
+ "cmdline": "root=/dev/sda1",
+ "kernel": "/base/kernel",
+ "cpu": 2,
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ }
+}
diff --git a/syz-cluster/pkg/fuzzconfig/generate.go b/syz-cluster/pkg/fuzzconfig/generate.go
new file mode 100644
index 000000000..5b503e3ae
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/generate.go
@@ -0,0 +1,188 @@
+// Copyright 2025 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+package fuzzconfig
+
+import (
+ _ "embed"
+ "encoding/json"
+ "fmt"
+
+ "github.com/google/syzkaller/pkg/config"
+ "github.com/google/syzkaller/pkg/mgrconfig"
+ "github.com/google/syzkaller/syz-cluster/pkg/api"
+)
+
+//go:embed base.cfg
+var baseConfigJSON []byte
+
+//go:embed patched.cfg
+var patchedConfigJSON []byte
+
+// GenerateBase produces a syz-manager config for the base kernel.
+// The caller must still invoke mgrconfig.Complete.
+func GenerateBase(cfg *api.FuzzConfig) (*mgrconfig.Config, error) {
+ var baseRaw json.RawMessage
+ err := config.LoadData(baseConfigJSON, &baseRaw)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read the base config: %w", err)
+ }
+ base, err := mgrconfig.LoadPartialData(baseRaw)
+ if err != nil {
+ return nil, fmt.Errorf("failed to load the config: %w", err)
+ }
+ err = applyFuzzConfig(base, cfg)
+ if err != nil {
+ return nil, err
+ }
+ return base, nil
+}
+
+// GeneratePatched produces a syz-manager config for the base kernel.
+// The caller must still invoke mgrconfig.Complete.
+func GeneratePatched(cfg *api.FuzzConfig) (*mgrconfig.Config, error) {
+ var baseRaw, deltaRaw json.RawMessage
+ err := config.LoadData(baseConfigJSON, &baseRaw)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read the base config: %w", err)
+ }
+ err = config.LoadData(patchedConfigJSON, &deltaRaw)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read the patched config: %w", err)
+ }
+ patchedRaw, err := config.MergeJSONs(baseRaw, deltaRaw)
+ if err != nil {
+ return nil, fmt.Errorf("failed to merge the configs: %w", err)
+ }
+ patched, err := mgrconfig.LoadPartialData(patchedRaw)
+ if err != nil {
+ return nil, fmt.Errorf("failed to load the config: %w", err)
+ }
+ err = applyFuzzConfig(patched, cfg)
+ if err != nil {
+ return nil, err
+ }
+ return patched, nil
+}
+
+func applyFuzzConfig(mgrCfg *mgrconfig.Config, cfg *api.FuzzConfig) error {
+ if len(cfg.Focus) == 0 {
+ noFocus(mgrCfg)
+ return nil
+ }
+ for _, focus := range cfg.Focus {
+ cb := setFocus[focus]
+ if cb == nil {
+ return fmt.Errorf("unknown focus: %s", focus)
+ }
+ err := cb(mgrCfg)
+ if err != nil {
+ return fmt.Errorf("failed to apply focus %s: %w", focus, err)
+ }
+ }
+ return nil
+}
+
+// nolint: lll
+var setFocus = map[string]func(*mgrconfig.Config) error{
+ api.FocusKVM: func(mgrCfg *mgrconfig.Config) error {
+ mgrCfg.EnabledSyscalls = append(mgrCfg.EnabledSyscalls,
+ "openat$kvm",
+ "openat$sev",
+ "close",
+ "ioctl$KVM*",
+ "syz_kvm*",
+ "mmap$KVM_VCPU",
+ "munmap",
+ "syz_memcpy_off$KVM_EXIT_MMIO",
+ "syz_memcpy_off$KVM_EXIT_HYPERCALL",
+ "eventfd2",
+ "write$eventfd",
+ )
+ var err error
+ mgrCfg.VM, err = config.MergeJSONs(mgrCfg.VM, []byte(
+ `{"qemu_args": "-machine q35,nvdimm=on,accel=kvm,kernel-irqchip=split -cpu max,migratable=off -enable-kvm -smp 2,sockets=2,cores=1"}`))
+ return err
+ },
+ api.FocusNet: func(mgrCfg *mgrconfig.Config) error {
+ mgrCfg.EnabledSyscalls = append(mgrCfg.EnabledSyscalls,
+ "accept", "accept4", "bind", "close", "connect", "epoll_create",
+ "epoll_create1", "epoll_ctl", "epoll_pwait", "epoll_wait",
+ "getpeername", "getsockname", "getsockopt", "ioctl", "listen",
+ "mmap", "poll", "ppoll", "pread64", "preadv", "pselect6",
+ "pwrite64", "pwritev", "read", "readv", "recvfrom", "recvmmsg",
+ "recvmsg", "select", "sendfile", "sendmmsg", "sendmsg", "sendto",
+ "setsockopt", "shutdown", "socket", "socketpair", "splice",
+ "vmsplice", "write", "writev", "tee", "bpf", "getpid",
+ "getgid", "getuid", "gettid", "unshare", "pipe",
+ "syz_emit_ethernet", "syz_extract_tcp_res",
+ "syz_genetlink_get_family_id", "syz_init_net_socket",
+ "mkdirat$cgroup*", "openat$cgroup*", "write$cgroup*",
+ "clock_gettime", "bpf", "openat$tun", "openat$ppp",
+ "syz_open_procfs$namespace", "syz_80211_*", "nanosleep",
+ "openat$nci", "ioctl$IOCTL_GET_NCIDEV_IDX", "openat$rfkill",
+ "openat$6lowpan*", "openat$pidfd", "openat$tcp*", "openat$vhost_vsock",
+ "openat$ptp*", "ioctl$PTP*",
+ )
+ return nil
+ },
+ api.FocusFS: func(mgrCfg *mgrconfig.Config) error {
+ mgrCfg.EnabledSyscalls = append(mgrCfg.EnabledSyscalls,
+ "syz_mount_image", "open", "openat", "creat", "close", "read",
+ "pread64", "readv", "preadv", "preadv2", "write", "pwrite64",
+ "writev", "pwritev", "pwritev2", "lseek", "copy_file_range", "dup",
+ "dup2", "dup3", "tee", "splice", "vmsplice", "sendfile", "stat",
+ "lstat", "fstat", "newfstatat", "statx", "poll", "clock_gettime",
+ "ppoll", "select", "pselect6", "epoll_create", "epoll_create1",
+ "epoll_ctl", "epoll_wait", "epoll_pwait", "epoll_pwait2", "mmap",
+ "munmap", "mremap", "msync", "readahead", "fcntl", "mknod", "mknodat",
+ "chmod", "fchmod", "fchmodat", "chown", "lchown", "fchown",
+ "fchownat", "fallocate", "faccessat", "faccessat2", "utime", "utimes",
+ "futimesat", "utimensat", "link", "linkat", "symlinkat", "symlink",
+ "unlink", "unlinkat", "readlink", "readlinkat", "rename", "renameat",
+ "renameat2", "mkdir", "mkdirat", "rmdir", "truncate", "ftruncate",
+ "flock", "fsync", "fdatasync", "sync", "syncfs", "sync_file_range",
+ "getdents", "getdents64", "name_to_handle_at", "open_by_handle_at",
+ "chroot", "getcwd", "chdir", "fchdir", "quotactl", "pivot_root",
+ "statfs", "fstatfs", "syz_open_procfs", "syz_read_part_table",
+ "mount", "fsopen", "fspick", "fsconfig", "fsmount", "move_mount",
+ "open_tree", "mount_setattr", "ioctl$FS_*", "ioctl$BTRFS*",
+ "ioctl$AUTOFS*", "ioctl$EXT4*", "ioctl$F2FS*", "ioctl$FAT*",
+ "ioctl$VFAT*", "ioctl$FI*",
+ )
+ mgrCfg.NoMutateSyscalls = append(mgrCfg.NoMutateSyscalls,
+ "syz_mount_image$btrfs",
+ "syz_mount_image$ext4",
+ "syz_mount_image$f2fs",
+ "syz_mount_image$ntfs",
+ "syz_mount_image$ocfs2",
+ "syz_mount_image$xfs",
+ )
+ return nil
+ },
+ api.FocusIoUring: func(mgrCfg *mgrconfig.Config) error {
+ mgrCfg.EnabledSyscalls = append(mgrCfg.EnabledSyscalls,
+ "io_uring_*", "syz_io_uring_*", "syz_memcpy_off", "mmap", "madvise",
+ "mprotect", "eventfd", "socket", "setsockopt", "accept", "open", "close",
+ "clock_gettime", "ioctl$sock_SIOCGIFINDEX", "ioctl$IOCTL_GET_NCIDEV_IDX",
+ "openat", "epoll_create",
+ )
+ return nil
+ },
+ api.FocusBPF: func(mgrCfg *mgrconfig.Config) error {
+ mgrCfg.EnabledSyscalls = append(mgrCfg.EnabledSyscalls,
+ "bpf", "mkdir", "mount$bpf", "unlink", "close",
+ "perf_event_open*", "ioctl$PERF*", "getpid", "gettid",
+ "socketpair", "sendmsg", "recvmsg", "setsockopt$sock_attach_bpf",
+ "socket", "ioctl$sock_kcm*", "syz_clone",
+ "mkdirat$cgroup*", "openat$cgroup*", "write$cgroup*",
+ "openat$tun", "write$tun", "ioctl$TUN*", "ioctl$SIOCSIFHWADDR",
+ "openat$ppp", "syz_open_procfs$namespace", "openat$pidfd", "fstat",
+ )
+ return nil
+ },
+}
+
+func noFocus(mgrCfg *mgrconfig.Config) {
+ mgrCfg.DisabledSyscalls = []string{"perf_event_open*", "syz_mount_image$hfs", "syz_mount_image$gfs*"}
+}
diff --git a/syz-cluster/pkg/fuzzconfig/generate_test.go b/syz-cluster/pkg/fuzzconfig/generate_test.go
new file mode 100644
index 000000000..1dd143eaf
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/generate_test.go
@@ -0,0 +1,79 @@
+// Copyright 2025 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+package fuzzconfig
+
+import (
+ "encoding/json"
+ "flag"
+ "os"
+ "path/filepath"
+ "testing"
+
+ "github.com/google/syzkaller/pkg/config"
+ "github.com/google/syzkaller/pkg/mgrconfig"
+ "github.com/google/syzkaller/syz-cluster/pkg/api"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+var flagWrite = flag.Bool("write", false, "overwrite out.txt files")
+
+func TestSingularFocus(t *testing.T) {
+ focusMap := map[string]struct{}{}
+ for _, target := range api.FuzzTargets {
+ for _, campaign := range target.Campaigns {
+ if campaign.Focus != "" {
+ focusMap[campaign.Focus] = struct{}{}
+ }
+ }
+ }
+ for focus := range focusMap {
+ t.Run(focus, func(t *testing.T) {
+ cfg := &api.FuzzConfig{Focus: []string{focus}}
+ runTest(t, cfg, filepath.Join("testdata", "singular", focus))
+ })
+ }
+}
+
+func TestNoFocus(t *testing.T) {
+ runTest(t, &api.FuzzConfig{}, filepath.Join("testdata", "singular", "default"))
+}
+
+func TestMultipleFocus(t *testing.T) {
+ runTest(t, &api.FuzzConfig{
+ Focus: []string{api.FocusBPF, api.FocusIoUring},
+ }, filepath.Join("testdata", "mixed", "bpf_io_uring"))
+}
+
+func runTest(t *testing.T, cfg *api.FuzzConfig, baseName string) {
+ base, err := GenerateBase(cfg)
+ require.NoError(t, err)
+ compareOrSave(t, baseName+".base.cfg", base)
+
+ patched, err := GeneratePatched(cfg)
+ require.NoError(t, err)
+ compareOrSave(t, baseName+".patched.cfg", patched)
+}
+
+func compareOrSave(t *testing.T, fileName string, mgrCfg *mgrconfig.Config) {
+ targetJSON, err := json.MarshalIndent(mgrCfg, "", "\t")
+ require.NoError(t, err)
+ if *flagWrite {
+ err = os.WriteFile(fileName, targetJSON, 0644)
+ require.NoError(t, err)
+ return
+ }
+
+ var raw json.RawMessage
+ err = config.LoadFile(fileName, &raw)
+ require.NoError(t, err)
+
+ cfg, err := mgrconfig.LoadPartialData(raw)
+ require.NoError(t, err)
+ require.NotNil(t, cfg)
+
+ resultJSON, err := json.MarshalIndent(cfg, "", "\t")
+ require.NoError(t, err)
+ assert.Equal(t, targetJSON, resultJSON)
+}
diff --git a/syz-cluster/pkg/fuzzconfig/patched.cfg b/syz-cluster/pkg/fuzzconfig/patched.cfg
new file mode 100644
index 000000000..8b4027891
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/patched.cfg
@@ -0,0 +1,10 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "kernel_obj": "/patched/obj",
+ "image": "/patched/image",
+ "vm": {
+ "count": 9,
+ "kernel": "/patched/kernel"
+ }
+}
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.base.cfg b/syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.base.cfg
new file mode 100644
index 000000000..6c4b3d58e
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.base.cfg
@@ -0,0 +1,90 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/base/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "bpf",
+ "mkdir",
+ "mount$bpf",
+ "unlink",
+ "close",
+ "perf_event_open*",
+ "ioctl$PERF*",
+ "getpid",
+ "gettid",
+ "socketpair",
+ "sendmsg",
+ "recvmsg",
+ "setsockopt$sock_attach_bpf",
+ "socket",
+ "ioctl$sock_kcm*",
+ "syz_clone",
+ "mkdirat$cgroup*",
+ "openat$cgroup*",
+ "write$cgroup*",
+ "openat$tun",
+ "write$tun",
+ "ioctl$TUN*",
+ "ioctl$SIOCSIFHWADDR",
+ "openat$ppp",
+ "syz_open_procfs$namespace",
+ "openat$pidfd",
+ "fstat",
+ "io_uring_*",
+ "syz_io_uring_*",
+ "syz_memcpy_off",
+ "mmap",
+ "madvise",
+ "mprotect",
+ "eventfd",
+ "socket",
+ "setsockopt",
+ "accept",
+ "open",
+ "close",
+ "clock_gettime",
+ "ioctl$sock_SIOCGIFINDEX",
+ "ioctl$IOCTL_GET_NCIDEV_IDX",
+ "openat",
+ "epoll_create"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "count": 3,
+ "cmdline": "root=/dev/sda1",
+ "kernel": "/base/kernel",
+ "cpu": 2,
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.patched.cfg b/syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.patched.cfg
new file mode 100644
index 000000000..ce1ee850a
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/mixed/bpf_io_uring.patched.cfg
@@ -0,0 +1,90 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/patched/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/patched/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "bpf",
+ "mkdir",
+ "mount$bpf",
+ "unlink",
+ "close",
+ "perf_event_open*",
+ "ioctl$PERF*",
+ "getpid",
+ "gettid",
+ "socketpair",
+ "sendmsg",
+ "recvmsg",
+ "setsockopt$sock_attach_bpf",
+ "socket",
+ "ioctl$sock_kcm*",
+ "syz_clone",
+ "mkdirat$cgroup*",
+ "openat$cgroup*",
+ "write$cgroup*",
+ "openat$tun",
+ "write$tun",
+ "ioctl$TUN*",
+ "ioctl$SIOCSIFHWADDR",
+ "openat$ppp",
+ "syz_open_procfs$namespace",
+ "openat$pidfd",
+ "fstat",
+ "io_uring_*",
+ "syz_io_uring_*",
+ "syz_memcpy_off",
+ "mmap",
+ "madvise",
+ "mprotect",
+ "eventfd",
+ "socket",
+ "setsockopt",
+ "accept",
+ "open",
+ "close",
+ "clock_gettime",
+ "ioctl$sock_SIOCGIFINDEX",
+ "ioctl$IOCTL_GET_NCIDEV_IDX",
+ "openat",
+ "epoll_create"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 9,
+ "cpu": 2,
+ "kernel": "/patched/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.base.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.base.cfg
new file mode 100644
index 000000000..79d1339c0
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.base.cfg
@@ -0,0 +1,73 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/base/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "bpf",
+ "mkdir",
+ "mount$bpf",
+ "unlink",
+ "close",
+ "perf_event_open*",
+ "ioctl$PERF*",
+ "getpid",
+ "gettid",
+ "socketpair",
+ "sendmsg",
+ "recvmsg",
+ "setsockopt$sock_attach_bpf",
+ "socket",
+ "ioctl$sock_kcm*",
+ "syz_clone",
+ "mkdirat$cgroup*",
+ "openat$cgroup*",
+ "write$cgroup*",
+ "openat$tun",
+ "write$tun",
+ "ioctl$TUN*",
+ "ioctl$SIOCSIFHWADDR",
+ "openat$ppp",
+ "syz_open_procfs$namespace",
+ "openat$pidfd",
+ "fstat"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "count": 3,
+ "cmdline": "root=/dev/sda1",
+ "kernel": "/base/kernel",
+ "cpu": 2,
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.patched.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.patched.cfg
new file mode 100644
index 000000000..059b47cf0
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/bpf.patched.cfg
@@ -0,0 +1,73 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/patched/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/patched/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "bpf",
+ "mkdir",
+ "mount$bpf",
+ "unlink",
+ "close",
+ "perf_event_open*",
+ "ioctl$PERF*",
+ "getpid",
+ "gettid",
+ "socketpair",
+ "sendmsg",
+ "recvmsg",
+ "setsockopt$sock_attach_bpf",
+ "socket",
+ "ioctl$sock_kcm*",
+ "syz_clone",
+ "mkdirat$cgroup*",
+ "openat$cgroup*",
+ "write$cgroup*",
+ "openat$tun",
+ "write$tun",
+ "ioctl$TUN*",
+ "ioctl$SIOCSIFHWADDR",
+ "openat$ppp",
+ "syz_open_procfs$namespace",
+ "openat$pidfd",
+ "fstat"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 9,
+ "cpu": 2,
+ "kernel": "/patched/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/default.base.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/default.base.cfg
new file mode 100644
index 000000000..28c8c600d
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/default.base.cfg
@@ -0,0 +1,49 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/base/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "disable_syscalls": [
+ "perf_event_open*",
+ "syz_mount_image$hfs",
+ "syz_mount_image$gfs*"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "count": 3,
+ "cmdline": "root=/dev/sda1",
+ "kernel": "/base/kernel",
+ "cpu": 2,
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/default.patched.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/default.patched.cfg
new file mode 100644
index 000000000..55d699651
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/default.patched.cfg
@@ -0,0 +1,49 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/patched/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/patched/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "disable_syscalls": [
+ "perf_event_open*",
+ "syz_mount_image$hfs",
+ "syz_mount_image$gfs*"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 9,
+ "cpu": 2,
+ "kernel": "/patched/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/fs.base.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/fs.base.cfg
new file mode 100644
index 000000000..8515dfe19
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/fs.base.cfg
@@ -0,0 +1,168 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/base/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "syz_mount_image",
+ "open",
+ "openat",
+ "creat",
+ "close",
+ "read",
+ "pread64",
+ "readv",
+ "preadv",
+ "preadv2",
+ "write",
+ "pwrite64",
+ "writev",
+ "pwritev",
+ "pwritev2",
+ "lseek",
+ "copy_file_range",
+ "dup",
+ "dup2",
+ "dup3",
+ "tee",
+ "splice",
+ "vmsplice",
+ "sendfile",
+ "stat",
+ "lstat",
+ "fstat",
+ "newfstatat",
+ "statx",
+ "poll",
+ "clock_gettime",
+ "ppoll",
+ "select",
+ "pselect6",
+ "epoll_create",
+ "epoll_create1",
+ "epoll_ctl",
+ "epoll_wait",
+ "epoll_pwait",
+ "epoll_pwait2",
+ "mmap",
+ "munmap",
+ "mremap",
+ "msync",
+ "readahead",
+ "fcntl",
+ "mknod",
+ "mknodat",
+ "chmod",
+ "fchmod",
+ "fchmodat",
+ "chown",
+ "lchown",
+ "fchown",
+ "fchownat",
+ "fallocate",
+ "faccessat",
+ "faccessat2",
+ "utime",
+ "utimes",
+ "futimesat",
+ "utimensat",
+ "link",
+ "linkat",
+ "symlinkat",
+ "symlink",
+ "unlink",
+ "unlinkat",
+ "readlink",
+ "readlinkat",
+ "rename",
+ "renameat",
+ "renameat2",
+ "mkdir",
+ "mkdirat",
+ "rmdir",
+ "truncate",
+ "ftruncate",
+ "flock",
+ "fsync",
+ "fdatasync",
+ "sync",
+ "syncfs",
+ "sync_file_range",
+ "getdents",
+ "getdents64",
+ "name_to_handle_at",
+ "open_by_handle_at",
+ "chroot",
+ "getcwd",
+ "chdir",
+ "fchdir",
+ "quotactl",
+ "pivot_root",
+ "statfs",
+ "fstatfs",
+ "syz_open_procfs",
+ "syz_read_part_table",
+ "mount",
+ "fsopen",
+ "fspick",
+ "fsconfig",
+ "fsmount",
+ "move_mount",
+ "open_tree",
+ "mount_setattr",
+ "ioctl$FS_*",
+ "ioctl$BTRFS*",
+ "ioctl$AUTOFS*",
+ "ioctl$EXT4*",
+ "ioctl$F2FS*",
+ "ioctl$FAT*",
+ "ioctl$VFAT*",
+ "ioctl$FI*"
+ ],
+ "no_mutate_syscalls": [
+ "syz_mount_image$btrfs",
+ "syz_mount_image$ext4",
+ "syz_mount_image$f2fs",
+ "syz_mount_image$ntfs",
+ "syz_mount_image$ocfs2",
+ "syz_mount_image$xfs"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "count": 3,
+ "cmdline": "root=/dev/sda1",
+ "kernel": "/base/kernel",
+ "cpu": 2,
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/fs.patched.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/fs.patched.cfg
new file mode 100644
index 000000000..9fbfaf3f6
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/fs.patched.cfg
@@ -0,0 +1,168 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/patched/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/patched/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "syz_mount_image",
+ "open",
+ "openat",
+ "creat",
+ "close",
+ "read",
+ "pread64",
+ "readv",
+ "preadv",
+ "preadv2",
+ "write",
+ "pwrite64",
+ "writev",
+ "pwritev",
+ "pwritev2",
+ "lseek",
+ "copy_file_range",
+ "dup",
+ "dup2",
+ "dup3",
+ "tee",
+ "splice",
+ "vmsplice",
+ "sendfile",
+ "stat",
+ "lstat",
+ "fstat",
+ "newfstatat",
+ "statx",
+ "poll",
+ "clock_gettime",
+ "ppoll",
+ "select",
+ "pselect6",
+ "epoll_create",
+ "epoll_create1",
+ "epoll_ctl",
+ "epoll_wait",
+ "epoll_pwait",
+ "epoll_pwait2",
+ "mmap",
+ "munmap",
+ "mremap",
+ "msync",
+ "readahead",
+ "fcntl",
+ "mknod",
+ "mknodat",
+ "chmod",
+ "fchmod",
+ "fchmodat",
+ "chown",
+ "lchown",
+ "fchown",
+ "fchownat",
+ "fallocate",
+ "faccessat",
+ "faccessat2",
+ "utime",
+ "utimes",
+ "futimesat",
+ "utimensat",
+ "link",
+ "linkat",
+ "symlinkat",
+ "symlink",
+ "unlink",
+ "unlinkat",
+ "readlink",
+ "readlinkat",
+ "rename",
+ "renameat",
+ "renameat2",
+ "mkdir",
+ "mkdirat",
+ "rmdir",
+ "truncate",
+ "ftruncate",
+ "flock",
+ "fsync",
+ "fdatasync",
+ "sync",
+ "syncfs",
+ "sync_file_range",
+ "getdents",
+ "getdents64",
+ "name_to_handle_at",
+ "open_by_handle_at",
+ "chroot",
+ "getcwd",
+ "chdir",
+ "fchdir",
+ "quotactl",
+ "pivot_root",
+ "statfs",
+ "fstatfs",
+ "syz_open_procfs",
+ "syz_read_part_table",
+ "mount",
+ "fsopen",
+ "fspick",
+ "fsconfig",
+ "fsmount",
+ "move_mount",
+ "open_tree",
+ "mount_setattr",
+ "ioctl$FS_*",
+ "ioctl$BTRFS*",
+ "ioctl$AUTOFS*",
+ "ioctl$EXT4*",
+ "ioctl$F2FS*",
+ "ioctl$FAT*",
+ "ioctl$VFAT*",
+ "ioctl$FI*"
+ ],
+ "no_mutate_syscalls": [
+ "syz_mount_image$btrfs",
+ "syz_mount_image$ext4",
+ "syz_mount_image$f2fs",
+ "syz_mount_image$ntfs",
+ "syz_mount_image$ocfs2",
+ "syz_mount_image$xfs"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 9,
+ "cpu": 2,
+ "kernel": "/patched/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.base.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.base.cfg
new file mode 100644
index 000000000..94990b812
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.base.cfg
@@ -0,0 +1,63 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/base/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "io_uring_*",
+ "syz_io_uring_*",
+ "syz_memcpy_off",
+ "mmap",
+ "madvise",
+ "mprotect",
+ "eventfd",
+ "socket",
+ "setsockopt",
+ "accept",
+ "open",
+ "close",
+ "clock_gettime",
+ "ioctl$sock_SIOCGIFINDEX",
+ "ioctl$IOCTL_GET_NCIDEV_IDX",
+ "openat",
+ "epoll_create"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "count": 3,
+ "cmdline": "root=/dev/sda1",
+ "kernel": "/base/kernel",
+ "cpu": 2,
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.patched.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.patched.cfg
new file mode 100644
index 000000000..4fe786944
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/io_uring.patched.cfg
@@ -0,0 +1,63 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/patched/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/patched/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "io_uring_*",
+ "syz_io_uring_*",
+ "syz_memcpy_off",
+ "mmap",
+ "madvise",
+ "mprotect",
+ "eventfd",
+ "socket",
+ "setsockopt",
+ "accept",
+ "open",
+ "close",
+ "clock_gettime",
+ "ioctl$sock_SIOCGIFINDEX",
+ "ioctl$IOCTL_GET_NCIDEV_IDX",
+ "openat",
+ "epoll_create"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 9,
+ "cpu": 2,
+ "kernel": "/patched/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.base.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.base.cfg
new file mode 100644
index 000000000..bdfe653ef
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.base.cfg
@@ -0,0 +1,57 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/base/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "openat$kvm",
+ "openat$sev",
+ "close",
+ "ioctl$KVM*",
+ "syz_kvm*",
+ "mmap$KVM_VCPU",
+ "munmap",
+ "syz_memcpy_off$KVM_EXIT_MMIO",
+ "syz_memcpy_off$KVM_EXIT_HYPERCALL",
+ "eventfd2",
+ "write$eventfd"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 3,
+ "cpu": 2,
+ "kernel": "/base/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35,nvdimm=on,accel=kvm,kernel-irqchip=split -cpu max,migratable=off -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.patched.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.patched.cfg
new file mode 100644
index 000000000..86e319ac7
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/kvm.patched.cfg
@@ -0,0 +1,57 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/patched/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/patched/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "openat$kvm",
+ "openat$sev",
+ "close",
+ "ioctl$KVM*",
+ "syz_kvm*",
+ "mmap$KVM_VCPU",
+ "munmap",
+ "syz_memcpy_off$KVM_EXIT_MMIO",
+ "syz_memcpy_off$KVM_EXIT_HYPERCALL",
+ "eventfd2",
+ "write$eventfd"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 9,
+ "cpu": 2,
+ "kernel": "/patched/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35,nvdimm=on,accel=kvm,kernel-irqchip=split -cpu max,migratable=off -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/net.base.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/net.base.cfg
new file mode 100644
index 000000000..641241acb
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/net.base.cfg
@@ -0,0 +1,118 @@
+{
+ "name": "base",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/base/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/base/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "accept",
+ "accept4",
+ "bind",
+ "close",
+ "connect",
+ "epoll_create",
+ "epoll_create1",
+ "epoll_ctl",
+ "epoll_pwait",
+ "epoll_wait",
+ "getpeername",
+ "getsockname",
+ "getsockopt",
+ "ioctl",
+ "listen",
+ "mmap",
+ "poll",
+ "ppoll",
+ "pread64",
+ "preadv",
+ "pselect6",
+ "pwrite64",
+ "pwritev",
+ "read",
+ "readv",
+ "recvfrom",
+ "recvmmsg",
+ "recvmsg",
+ "select",
+ "sendfile",
+ "sendmmsg",
+ "sendmsg",
+ "sendto",
+ "setsockopt",
+ "shutdown",
+ "socket",
+ "socketpair",
+ "splice",
+ "vmsplice",
+ "write",
+ "writev",
+ "tee",
+ "bpf",
+ "getpid",
+ "getgid",
+ "getuid",
+ "gettid",
+ "unshare",
+ "pipe",
+ "syz_emit_ethernet",
+ "syz_extract_tcp_res",
+ "syz_genetlink_get_family_id",
+ "syz_init_net_socket",
+ "mkdirat$cgroup*",
+ "openat$cgroup*",
+ "write$cgroup*",
+ "clock_gettime",
+ "bpf",
+ "openat$tun",
+ "openat$ppp",
+ "syz_open_procfs$namespace",
+ "syz_80211_*",
+ "nanosleep",
+ "openat$nci",
+ "ioctl$IOCTL_GET_NCIDEV_IDX",
+ "openat$rfkill",
+ "openat$6lowpan*",
+ "openat$pidfd",
+ "openat$tcp*",
+ "openat$vhost_vsock",
+ "openat$ptp*",
+ "ioctl$PTP*"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "count": 3,
+ "cmdline": "root=/dev/sda1",
+ "kernel": "/base/kernel",
+ "cpu": 2,
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file
diff --git a/syz-cluster/pkg/fuzzconfig/testdata/singular/net.patched.cfg b/syz-cluster/pkg/fuzzconfig/testdata/singular/net.patched.cfg
new file mode 100644
index 000000000..985dbb9be
--- /dev/null
+++ b/syz-cluster/pkg/fuzzconfig/testdata/singular/net.patched.cfg
@@ -0,0 +1,118 @@
+{
+ "name": "patched",
+ "target": "linux/amd64",
+ "http": "",
+ "rpc": ":0",
+ "workdir": "/workdir",
+ "kernel_obj": "/patched/obj",
+ "kernel_build_src": "/workdir",
+ "android_split_build": false,
+ "image": "/patched/image",
+ "ssh_user": "root",
+ "syzkaller": "/syzkaller",
+ "procs": 3,
+ "max_crash_logs": 100,
+ "sandbox": "none",
+ "sandbox_arg": 0,
+ "snapshot": false,
+ "cover": true,
+ "cover_filter": {},
+ "raw_cover": false,
+ "reproduce": true,
+ "preserve_corpus": true,
+ "enable_syscalls": [
+ "accept",
+ "accept4",
+ "bind",
+ "close",
+ "connect",
+ "epoll_create",
+ "epoll_create1",
+ "epoll_ctl",
+ "epoll_pwait",
+ "epoll_wait",
+ "getpeername",
+ "getsockname",
+ "getsockopt",
+ "ioctl",
+ "listen",
+ "mmap",
+ "poll",
+ "ppoll",
+ "pread64",
+ "preadv",
+ "pselect6",
+ "pwrite64",
+ "pwritev",
+ "read",
+ "readv",
+ "recvfrom",
+ "recvmmsg",
+ "recvmsg",
+ "select",
+ "sendfile",
+ "sendmmsg",
+ "sendmsg",
+ "sendto",
+ "setsockopt",
+ "shutdown",
+ "socket",
+ "socketpair",
+ "splice",
+ "vmsplice",
+ "write",
+ "writev",
+ "tee",
+ "bpf",
+ "getpid",
+ "getgid",
+ "getuid",
+ "gettid",
+ "unshare",
+ "pipe",
+ "syz_emit_ethernet",
+ "syz_extract_tcp_res",
+ "syz_genetlink_get_family_id",
+ "syz_init_net_socket",
+ "mkdirat$cgroup*",
+ "openat$cgroup*",
+ "write$cgroup*",
+ "clock_gettime",
+ "bpf",
+ "openat$tun",
+ "openat$ppp",
+ "syz_open_procfs$namespace",
+ "syz_80211_*",
+ "nanosleep",
+ "openat$nci",
+ "ioctl$IOCTL_GET_NCIDEV_IDX",
+ "openat$rfkill",
+ "openat$6lowpan*",
+ "openat$pidfd",
+ "openat$tcp*",
+ "openat$vhost_vsock",
+ "openat$ptp*",
+ "ioctl$PTP*"
+ ],
+ "strace_bin": "",
+ "strace_bin_on_target": false,
+ "execprog_bin_on_target": "",
+ "executor_bin_on_target": "",
+ "run_fsck": true,
+ "type": "qemu",
+ "vm": {
+ "cmdline": "root=/dev/sda1",
+ "count": 9,
+ "cpu": 2,
+ "kernel": "/patched/kernel",
+ "mem": 7168,
+ "qemu_args": "-machine q35 -enable-kvm -smp 2,sockets=2,cores=1"
+ },
+ "asset_storage": null,
+ "Experimental": {
+ "reset_acc_state": false,
+ "remote_cover": true,
+ "cover_edges": false,
+ "descriptions_mode": "manual"
+ }
+} \ No newline at end of file