aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-08-11 16:25:44 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-08-12 13:49:42 +0000
commit6c0b41a01e303797e859c01e425dc47aafe4cf45 (patch)
tree7b0fc00730d66758aa799e7aa56f0145b0c922f5 /syz-cluster/pkg
parentada7557073de86aa26dc6304bceeae76f212486a (diff)
syz-cluster: refactor fuzz config structures
Keep the fuzz-step parameters in a separate structure to minimize the field duplication. It will also facilitate the reuse of the same syzkaller config in several fuzzing configurations.
Diffstat (limited to 'syz-cluster/pkg')
-rw-r--r--syz-cluster/pkg/api/api.go51
-rw-r--r--syz-cluster/pkg/api/client.go4
-rw-r--r--syz-cluster/pkg/triage/fuzz_config.go2
-rw-r--r--syz-cluster/pkg/triage/fuzz_config_test.go10
4 files changed, 41 insertions, 26 deletions
diff --git a/syz-cluster/pkg/api/api.go b/syz-cluster/pkg/api/api.go
index decbc9611..5976db71d 100644
--- a/syz-cluster/pkg/api/api.go
+++ b/syz-cluster/pkg/api/api.go
@@ -15,10 +15,15 @@ type TriageResult struct {
// The data layout faclitates the simplicity of the workflow definition.
type FuzzTask struct {
- Base BuildRequest `json:"base"`
- Patched BuildRequest `json:"patched"`
- Config string `json:"config"` // Refers to workflow/configs/{}.
- CorpusURL string `json:"corpus_url"`
+ Base BuildRequest `json:"base"`
+ Patched BuildRequest `json:"patched"`
+ FuzzConfig
+}
+
+// FuzzConfig represents a set of parameters passed to the fuzz step.
+type FuzzConfig struct {
+ Config string `json:"config"` // Refers to workflow/configs/{}.
+ CorpusURL string `json:"corpus_url"`
}
// The triage step of the workflow will request these from controller.
@@ -29,11 +34,11 @@ type Tree struct {
EmailLists []string `json:"email_lists"`
}
-type FuzzConfig struct {
- Name string `json:"name"` // Primary key.
+// TriageFuzzConfig is a single record in the list of supported fuzz configs.
+type TriageFuzzConfig struct {
EmailLists []string `json:"email_lists"`
KernelConfig string `json:"kernel_config"`
- CorpusURL string `json:"corpus_url"`
+ FuzzConfig
}
type BuildRequest struct {
@@ -208,39 +213,49 @@ const (
)
// The list is ordered by decreasing importance.
-var FuzzConfigs = []*FuzzConfig{
+var FuzzConfigs = []*TriageFuzzConfig{
{
- Name: `kvm`,
EmailLists: []string{`kvm@vger.kernel.org`},
KernelConfig: `upstream-apparmor-kasan.config`,
- CorpusURL: allCorpusURL,
+ FuzzConfig: FuzzConfig{
+ Config: `kvm`,
+ CorpusURL: allCorpusURL,
+ },
},
{
- Name: `io-uring`,
EmailLists: []string{`io-uring@vger.kernel.org`},
KernelConfig: `upstream-apparmor-kasan.config`,
- CorpusURL: allCorpusURL,
+ FuzzConfig: FuzzConfig{
+ Config: `io-uring`,
+ CorpusURL: allCorpusURL,
+ },
},
{
- Name: `bpf`,
EmailLists: []string{`bpf@vger.kernel.org`},
KernelConfig: `upstream-apparmor-kasan.config`,
- CorpusURL: bpfCorpusURL,
+ FuzzConfig: FuzzConfig{
+ Config: `bpf`,
+ CorpusURL: bpfCorpusURL,
+ },
},
{
- Name: `net`,
EmailLists: []string{
`netdev@vger.kernel.org`,
`netfilter-devel@vger.kernel.org`,
`linux-wireless@vger.kernel.org`,
},
KernelConfig: `upstream-apparmor-kasan.config`,
- CorpusURL: netCorpusURL,
+ FuzzConfig: FuzzConfig{
+ Config: `net`,
+ CorpusURL: netCorpusURL,
+ },
},
{
- Name: `all`,
EmailLists: nil, // A fallback option.
KernelConfig: `upstream-apparmor-kasan.config`,
- CorpusURL: allCorpusURL,
+ FuzzConfig: FuzzConfig{
+ Config: `all`,
+ CorpusURL: allCorpusURL,
+ },
},
}
diff --git a/syz-cluster/pkg/api/client.go b/syz-cluster/pkg/api/client.go
index 7186e6571..1b571c628 100644
--- a/syz-cluster/pkg/api/client.go
+++ b/syz-cluster/pkg/api/client.go
@@ -41,8 +41,8 @@ func (client Client) UploadTriageResult(ctx context.Context, sessionID string, r
}
type TreesResp struct {
- Trees []*Tree `json:"trees"`
- FuzzConfigs []*FuzzConfig `json:"fuzz_configs"`
+ Trees []*Tree `json:"trees"`
+ FuzzConfigs []*TriageFuzzConfig `json:"fuzz_configs"`
}
func (client Client) GetTrees(ctx context.Context) (*TreesResp, error) {
diff --git a/syz-cluster/pkg/triage/fuzz_config.go b/syz-cluster/pkg/triage/fuzz_config.go
index fbe576162..05443d704 100644
--- a/syz-cluster/pkg/triage/fuzz_config.go
+++ b/syz-cluster/pkg/triage/fuzz_config.go
@@ -9,7 +9,7 @@ import (
"github.com/google/syzkaller/syz-cluster/pkg/api"
)
-func SelectFuzzConfig(series *api.Series, fuzzConfigs []*api.FuzzConfig) *api.FuzzConfig {
+func SelectFuzzConfig(series *api.Series, fuzzConfigs []*api.TriageFuzzConfig) *api.TriageFuzzConfig {
seriesCc := map[string]bool{}
for _, cc := range series.Cc {
seriesCc[strings.ToLower(cc)] = true
diff --git a/syz-cluster/pkg/triage/fuzz_config_test.go b/syz-cluster/pkg/triage/fuzz_config_test.go
index 7a58cf464..04f948493 100644
--- a/syz-cluster/pkg/triage/fuzz_config_test.go
+++ b/syz-cluster/pkg/triage/fuzz_config_test.go
@@ -11,18 +11,18 @@ import (
)
func TestSelectFuzzConfig(t *testing.T) {
- configs := []*api.FuzzConfig{
+ configs := []*api.TriageFuzzConfig{
{
- Name: "bpf",
EmailLists: []string{"bpf@list"},
+ FuzzConfig: api.FuzzConfig{Config: "bpf"},
},
{
- Name: "net",
EmailLists: []string{"net@list"},
+ FuzzConfig: api.FuzzConfig{Config: "net"},
},
{
- Name: "mainline",
EmailLists: nil,
+ FuzzConfig: api.FuzzConfig{Config: "mainline"},
},
}
tests := []struct {
@@ -45,7 +45,7 @@ func TestSelectFuzzConfig(t *testing.T) {
for _, test := range tests {
t.Run(test.testName, func(t *testing.T) {
ret := SelectFuzzConfig(test.series, configs)
- assert.Equal(t, test.result, ret.Name)
+ assert.Equal(t, test.result, ret.Config)
})
}
}