aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-cover
diff options
context:
space:
mode:
authorzsm-oss <31279919+zsm-oss@users.noreply.github.com>2023-06-15 06:58:56 -0700
committerGitHub <noreply@github.com>2023-06-15 06:58:56 -0700
commit6d01f20890edf11b99bb54573025b11c1acd2d52 (patch)
tree4df359e6ad1b548dbaf3011fb4b6dcd1fc813318 /tools/syz-cover
parent757d26edba7d7de8c564a87a262a0b1321ddf804 (diff)
syz-cover: accept canonical module info (#3964)
* syz-manager: endpoint to display canonical modules Add a "/modules" endpoint that displays canonical module information. * tools/syz-cover: accept module info Add support to syz-cover to generate coverage reports for drivers that are built as kernel modules. At the moment, ReportGenerator instances are created with no []host.KernelModule information. As a result, discoverModulesLinux() does not process kernel modules, only the vmlinux. Add a "-modules" flag that accepts module info. This info can be fetched from the web UI at "/modules". Usage: $ ./bin/syz-cover -arch arm64 -kernel_obj ${KOBJ} -kernel_src ${KSRC} \ -json ~/report.json -modules ~/modules \ ~/rawcover
Diffstat (limited to 'tools/syz-cover')
-rw-r--r--tools/syz-cover/syz-cover.go25
1 files changed, 24 insertions, 1 deletions
diff --git a/tools/syz-cover/syz-cover.go b/tools/syz-cover/syz-cover.go
index 80c58ffc5..a28d8db5d 100644
--- a/tools/syz-cover/syz-cover.go
+++ b/tools/syz-cover/syz-cover.go
@@ -19,6 +19,7 @@ package main
import (
"bufio"
"bytes"
+ "encoding/json"
"flag"
"fmt"
"os"
@@ -28,6 +29,7 @@ import (
"strings"
"github.com/google/syzkaller/pkg/cover"
+ "github.com/google/syzkaller/pkg/host"
"github.com/google/syzkaller/pkg/osutil"
"github.com/google/syzkaller/pkg/tool"
"github.com/google/syzkaller/sys/targets"
@@ -41,6 +43,7 @@ func main() {
flagKernelSrc = flag.String("kernel_src", "", "path to kernel sources")
flagKernelBuildSrc = flag.String("kernel_build_src", "", "path to kernel image's build dir (optional)")
flagKernelObj = flag.String("kernel_obj", "", "path to kernel build/obj dir")
+ flagModules = flag.String("modules", "", "modules info obtained from /modules (optional)")
flagExportCSV = flag.String("csv", "", "export coverage data in csv format (optional)")
flagExportLineJSON = flag.String("json", "", "export coverage data with source line info in json format (optional)")
flagExportHTML = flag.String("html", "", "save coverage HTML report to file (optional)")
@@ -72,8 +75,16 @@ func main() {
if err != nil {
tool.Fail(err)
}
+ var modules []host.KernelModule
+ if *flagModules != "" {
+ m, err := loadModules(*flagModules)
+ if err != nil {
+ tool.Fail(err)
+ }
+ modules = m
+ }
rg, err := cover.MakeReportGenerator(target, *flagVM, *flagKernelObj,
- *flagKernelSrc, *flagKernelBuildSrc, nil, nil, nil, false)
+ *flagKernelSrc, *flagKernelBuildSrc, nil, nil, modules, false)
if err != nil {
tool.Fail(err)
}
@@ -140,3 +151,15 @@ func readPCs(files []string) ([]uint64, error) {
}
return pcs, nil
}
+
+func loadModules(fname string) ([]host.KernelModule, error) {
+ data, err := os.ReadFile(fname)
+ if err != nil {
+ return nil, err
+ }
+ var modules []host.KernelModule
+ if err := json.Unmarshal(data, &modules); err != nil {
+ return nil, err
+ }
+ return modules, nil
+}