From 500aee76e6243afdb6c953d37e5f1016f73a04cc Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Wed, 23 Oct 2024 22:26:33 +0200 Subject: pkg/manager: configure coverage filter generation strictness In some cases, one might want to tolerate non-perfect filters. --- pkg/manager/covfilter.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'pkg') diff --git a/pkg/manager/covfilter.go b/pkg/manager/covfilter.go index 03f3064af..2b5e3f589 100644 --- a/pkg/manager/covfilter.go +++ b/pkg/manager/covfilter.go @@ -17,7 +17,8 @@ import ( "github.com/google/syzkaller/pkg/mgrconfig" ) -func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCfg) (map[uint64]struct{}, error) { +func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCfg, + strict bool) (map[uint64]struct{}, error) { if covCfg.Empty() { return nil, nil } @@ -31,7 +32,7 @@ func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCf apply(&sym.ObjectUnit) } } - if err := covFilterAddFilter(pcs, covCfg.Functions, foreachSymbol); err != nil { + if err := covFilterAddFilter(pcs, covCfg.Functions, foreachSymbol, strict); err != nil { return nil, err } foreachUnit := func(apply func(*backend.ObjectUnit)) { @@ -39,7 +40,7 @@ func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCf apply(&unit.ObjectUnit) } } - if err := covFilterAddFilter(pcs, covCfg.Files, foreachUnit); err != nil { + if err := covFilterAddFilter(pcs, covCfg.Files, foreachUnit, strict); err != nil { return nil, err } if err := covFilterAddRawPCs(pcs, covCfg.RawPCs); err != nil { @@ -49,7 +50,8 @@ func CoverageFilter(source *ReportGeneratorWrapper, covCfg mgrconfig.CovFilterCf return pcs, nil } -func covFilterAddFilter(pcs map[uint64]struct{}, filters []string, foreach func(func(*backend.ObjectUnit))) error { +func covFilterAddFilter(pcs map[uint64]struct{}, filters []string, foreach func(func(*backend.ObjectUnit)), + strict bool) error { res, err := compileRegexps(filters) if err != nil { return err @@ -75,7 +77,7 @@ func covFilterAddFilter(pcs map[uint64]struct{}, filters []string, foreach func( sort.Strings(used[re]) log.Logf(0, "coverage filter: %v: %v", re, used[re]) } - if len(res) != len(used) { + if strict && len(res) != len(used) { return fmt.Errorf("some filters don't match anything") } return nil @@ -134,11 +136,12 @@ type CoverageFilters struct { ExecutorFilter map[uint64]struct{} } -func PrepareCoverageFilters(source *ReportGeneratorWrapper, cfg *mgrconfig.Config) (CoverageFilters, error) { +func PrepareCoverageFilters(source *ReportGeneratorWrapper, cfg *mgrconfig.Config, + strict bool) (CoverageFilters, error) { var ret CoverageFilters needExecutorFilter := len(cfg.Experimental.FocusAreas) > 0 for _, area := range cfg.Experimental.FocusAreas { - pcs, err := CoverageFilter(source, area.Filter) + pcs, err := CoverageFilter(source, area.Filter, strict) if err != nil { return ret, err } -- cgit mrf-deployment