aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAlexander Potapenko <glider@google.com>2024-04-10 13:21:24 +0200
committerAlexander Potapenko <glider@google.com>2024-04-10 12:45:51 +0000
commit97069202554c66fd6d17c9d08725a7a27f500c8d (patch)
tree1e039521e6e8217a961951675d3b51ba2ea86daa /pkg
parent4320ec32bd44793e077a482003409ae791e1dfea (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.go9
-rw-r--r--pkg/cover/report.go7
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 {