diff options
| -rw-r--r-- | pkg/cover/report.go | 5 | ||||
| -rw-r--r-- | pkg/cover/report_test.go | 3 | ||||
| -rw-r--r-- | syz-manager/covfilter.go | 15 | ||||
| -rw-r--r-- | syz-manager/rpc.go | 10 |
4 files changed, 17 insertions, 16 deletions
diff --git a/pkg/cover/report.go b/pkg/cover/report.go index e50e11d13..234c30823 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -26,10 +26,7 @@ type Prog struct { PCs []uint64 } -var ( - RestorePC = backend.RestorePC - PreviousInstructionPC = backend.PreviousInstructionPC -) +var RestorePC = backend.RestorePC func MakeReportGenerator(target *targets.Target, vm, objDir, srcDir, buildDir string) (*ReportGenerator, error) { if objDir == "" { diff --git a/pkg/cover/report_test.go b/pkg/cover/report_test.go index afda03203..63f1ff50a 100644 --- a/pkg/cover/report_test.go +++ b/pkg/cover/report_test.go @@ -21,6 +21,7 @@ import ( "testing" "time" + "github.com/google/syzkaller/pkg/cover/backend" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/pkg/symbolizer" _ "github.com/google/syzkaller/sys" @@ -190,7 +191,7 @@ func generateReport(t *testing.T, target *targets.Target, test Test) ([]byte, [] if err != nil { t.Fatal(err) } - pcs = append(pcs, PreviousInstructionPC(target, pc)) + pcs = append(pcs, backend.PreviousInstructionPC(target, pc)) t.Logf("using exact coverage PC 0x%x", pcs[0]) } else if target.OS == runtime.GOOS && (target.Arch == runtime.GOARCH || target.VMArch == runtime.GOARCH) { t.Fatal(err) diff --git a/syz-manager/covfilter.go b/syz-manager/covfilter.go index db4c5a64f..fc3c674f8 100644 --- a/syz-manager/covfilter.go +++ b/syz-manager/covfilter.go @@ -23,14 +23,13 @@ import ( func createCoverageFilter(cfg *mgrconfig.Config) (string, map[uint32]uint32, error) { pcs := make(map[uint32]uint32) filter := &cfg.CovFilter - if len(filter.Files) != 0 || len(filter.Functions) != 0 { - rg, err := getReportGenerator(cfg) - if err != nil { - return "", nil, err - } - if err := initFilesFuncs(pcs, filter.Files, filter.Functions, rg); err != nil { - return "", nil, err - } + // Always initialize ReportGenerator because RPCServer.NewInput will need it to filter coverage. + rg, err := getReportGenerator(cfg) + if err != nil { + return "", nil, err + } + if err := initFilesFuncs(pcs, filter.Files, filter.Functions, rg); err != nil { + return "", nil, err } if err := initWeightedPCs(pcs, filter.RawPCs); err != nil { return "", nil, err diff --git a/syz-manager/rpc.go b/syz-manager/rpc.go index e17489994..7ea1c5a23 100644 --- a/syz-manager/rpc.go +++ b/syz-manager/rpc.go @@ -250,11 +250,15 @@ func (serv *RPCServer) NewInput(a *rpctype.NewInputArgs, r *int) error { } diff := serv.corpusCover.MergeDiff(a.Cover) serv.stats.corpusCover.set(len(serv.corpusCover)) - if serv.coverFilter != nil { + if len(diff) != 0 && serv.coverFilter != nil { + // Note: ReportGenerator is already initialized if coverFilter is enabled. + rg, err := getReportGenerator(serv.cfg) + if err != nil { + return err + } filtered := 0 for _, pc := range diff { - prevPC := uint32(cover.PreviousInstructionPC(serv.cfg.SysTarget, uint64(pc))) - if serv.coverFilter[prevPC] != 0 { + if serv.coverFilter[uint32(rg.RestorePC(pc))] != 0 { filtered++ } } |
