Skip to content

Commit 1a7fb46

Browse files
committed
syz-cluster: report reproducers for findings
Move C repro generation from syz-manager to pkg/repro to avoid code duplication.
1 parent e37f12b commit 1a7fb46

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

pkg/repro/repro.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,3 +989,15 @@ func (stats *Stats) FullLog() []byte {
989989
stats.ExtractProgTime, stats.MinimizeProgTime,
990990
stats.SimplifyProgTime, stats.ExtractCTime, stats.SimplifyCTime, stats.Log))
991991
}
992+
993+
func (repro *Result) CProgram() ([]byte, error) {
994+
cprog, err := csource.Write(repro.Prog, repro.Opts)
995+
if err == nil {
996+
formatted, err := csource.Format(cprog)
997+
if err == nil {
998+
return formatted, nil
999+
}
1000+
return cprog, nil
1001+
}
1002+
return nil, err
1003+
}

syz-cluster/workflow/fuzz-step/main.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,19 @@ func reportFinding(ctx context.Context, client *api.Client, bug *manager.UniqueB
259259
Title: bug.Report.Title,
260260
Report: bug.Report.Report,
261261
Log: bug.Report.Output,
262-
// TODO: include the reproducer.
262+
}
263+
if repro := bug.Repro; repro != nil {
264+
if repro.Prog != nil {
265+
finding.SyzRepro = repro.Prog.Serialize()
266+
finding.SyzReproOpts = repro.Opts.Serialize()
267+
}
268+
if repro.CRepro {
269+
var err error
270+
finding.CRepro, err = repro.CProgram()
271+
if err != nil {
272+
app.Errorf("failed to generate C program: %v", err)
273+
}
274+
}
263275
}
264276
return client.UploadFinding(ctx, finding)
265277
}

syz-manager/manager.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"github.com/google/syzkaller/dashboard/dashapi"
2525
"github.com/google/syzkaller/pkg/asset"
2626
"github.com/google/syzkaller/pkg/corpus"
27-
"github.com/google/syzkaller/pkg/csource"
2827
"github.com/google/syzkaller/pkg/db"
2928
"github.com/google/syzkaller/pkg/flatrpc"
3029
"github.com/google/syzkaller/pkg/fuzzer"
@@ -864,14 +863,9 @@ func (mgr *Manager) saveRepro(res *manager.ReproResult) {
864863

865864
var cprogText []byte
866865
if repro.CRepro {
867-
cprog, err := csource.Write(repro.Prog, repro.Opts)
868-
if err == nil {
869-
formatted, err := csource.Format(cprog)
870-
if err == nil {
871-
cprog = formatted
872-
}
873-
cprogText = cprog
874-
} else {
866+
var err error
867+
cprogText, err = repro.CProgram()
868+
if err != nil {
875869
log.Logf(0, "failed to write C source: %v", err)
876870
}
877871
}

0 commit comments

Comments
 (0)