From 5e933e8c7b82e170b667885d3b99098e2e86f29d Mon Sep 17 00:00:00 2001 From: Joey Jiao Date: Tue, 2 Mar 2021 09:31:32 +0800 Subject: all: support coverage of kernel modules The PCs returned for dynamic loaded module (DLKM) is not parsed in coverage page, these PCs are dropped. The commit is to use DLKM modules' load address and symbol file to restore the PC and show coverage data of DLKM. Introduced new config module_obj to specify module directories. Example of config: "module_obj": [ "module_path1" "module_path2" ] For linux target, before Manager.Connect run, load addresses are getting from /proc/modules in order to group PCs into modules. And so, if modules are under kernel_obj or module_obj dir, their addresses and paths can be generated automatically. kernel_obj is searched before module_obj dir and the first found ko object is always used. Also note that kaslr needs to be disabled. --- tools/syz-cover/syz-cover.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/syz-cover/syz-cover.go b/tools/syz-cover/syz-cover.go index 4c69b6c09..2921948d1 100644 --- a/tools/syz-cover/syz-cover.go +++ b/tools/syz-cover/syz-cover.go @@ -28,6 +28,7 @@ import ( "strings" "github.com/google/syzkaller/pkg/cover" + "github.com/google/syzkaller/pkg/cover/backend" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/pkg/tool" "github.com/google/syzkaller/sys/targets" @@ -67,7 +68,8 @@ func main() { if err != nil { tool.Fail(err) } - rg, err := cover.MakeReportGenerator(target, *flagVM, *flagKernelObj, *flagKernelSrc, *flagKernelBuildSrc, nil) + rg, err := cover.MakeReportGenerator(target, *flagVM, *flagKernelObj, + *flagKernelSrc, *flagKernelBuildSrc, nil, nil, make(map[string]backend.KernelModule)) if err != nil { tool.Fail(err) } -- cgit mrf-deployment