diff options
| author | zsm-oss <31279919+zsm-oss@users.noreply.github.com> | 2023-06-15 06:58:56 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-15 06:58:56 -0700 |
| commit | 6d01f20890edf11b99bb54573025b11c1acd2d52 (patch) | |
| tree | 4df359e6ad1b548dbaf3011fb4b6dcd1fc813318 /tools/syz-cover | |
| parent | 757d26edba7d7de8c564a87a262a0b1321ddf804 (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.go | 25 |
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 +} |
