diff options
| author | Alexander Potapenko <glider@google.com> | 2024-04-10 13:21:24 +0200 |
|---|---|---|
| committer | Alexander Potapenko <glider@google.com> | 2024-04-10 12:45:51 +0000 |
| commit | 97069202554c66fd6d17c9d08725a7a27f500c8d (patch) | |
| tree | 1e039521e6e8217a961951675d3b51ba2ea86daa /pkg | |
| parent | 4320ec32bd44793e077a482003409ae791e1dfea (diff) | |
pkg/cover, syz-manager, tools/syz-cover: add the ?force=1 URL parameter for coverage
When coverage points returned by kcov do not have corresponding coverage
callbacks, this may indicate a problem with irrelevant signal being used
for fuzzing. Therefore, by default syz-manager reports errors and does
not show the coverage report in this case.
However, these errors can be annoying when onboarding new platforms, so
we let the users disable them by passing the ?force=1 URL parameter.
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/html.go | 9 | ||||
| -rw-r--r-- | pkg/cover/report.go | 7 |
2 files changed, 9 insertions, 7 deletions
diff --git a/pkg/cover/html.go b/pkg/cover/html.go index a3a9f0846..3ab1ada6f 100644 --- a/pkg/cover/html.go +++ b/pkg/cover/html.go @@ -27,11 +27,12 @@ type CoverHandlerParams struct { Progs []Prog CoverFilter map[uint32]uint32 Debug bool + Force bool } func (rg *ReportGenerator) DoHTML(w io.Writer, params CoverHandlerParams) error { var progs = fixUpPCs(rg.target.Arch, params.Progs, params.CoverFilter) - files, err := rg.prepareFileMap(progs, params.Debug) + files, err := rg.prepareFileMap(progs, params.Force, params.Debug) if err != nil { return err } @@ -134,7 +135,7 @@ type lineCoverExport struct { func (rg *ReportGenerator) DoLineJSON(w io.Writer, params CoverHandlerParams) error { var progs = fixUpPCs(rg.target.Arch, params.Progs, params.CoverFilter) - files, err := rg.prepareFileMap(progs, params.Debug) + files, err := rg.prepareFileMap(progs, params.Force, params.Debug) if err != nil { return err } @@ -348,7 +349,7 @@ var csvFilesHeader = []string{ } func (rg *ReportGenerator) convertToStats(progs []Prog) ([]fileStats, error) { - files, err := rg.prepareFileMap(progs, false) + files, err := rg.prepareFileMap(progs, false, false) if err != nil { return nil, err } @@ -596,7 +597,7 @@ var csvHeader = []string{ func (rg *ReportGenerator) DoCSV(w io.Writer, params CoverHandlerParams) error { var progs = fixUpPCs(rg.target.Arch, params.Progs, params.CoverFilter) - files, err := rg.prepareFileMap(progs, params.Debug) + files, err := rg.prepareFileMap(progs, params.Force, params.Debug) if err != nil { return err } diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 400ffdc02..5ccd499c5 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -78,7 +78,7 @@ type line struct { type fileMap map[string]*file -func (rg *ReportGenerator) prepareFileMap(progs []Prog, debug bool) (fileMap, error) { +func (rg *ReportGenerator) prepareFileMap(progs []Prog, force, debug bool) (fileMap, error) { if err := rg.symbolizePCs(uniquePCs(progs)); err != nil { return nil, err } @@ -135,7 +135,7 @@ func (rg *ReportGenerator) prepareFileMap(progs []Prog, debug bool) (fileMap, er } // If the backend provided coverage callback locations for the binaries, use them to // verify data returned by kcov. - if len(unmatchedProgPCs) > 0 { + if len(unmatchedProgPCs) > 0 && !force { return nil, coverageCallbackMismatch(debug, len(progPCs), unmatchedProgPCs) } for _, unit := range rg.Units { @@ -181,7 +181,8 @@ func coverageCallbackMismatch(debug bool, numPCs int, unmatchedProgPCs map[uint6 } } return fmt.Errorf("%d out of %d PCs returned by kcov do not have matching coverage callbacks."+ - " Check the discoverModules() code.%s", len(unmatchedProgPCs), numPCs, debugStr) + " Check the discoverModules() code. Use ?force=1 to disable this message.%s", + len(unmatchedProgPCs), numPCs, debugStr) } func uniquePCs(progs []Prog) []uint64 { |
