diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-12-11 12:35:41 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-12-13 18:56:36 +0100 |
| commit | 7268cf9dbd7bb12380df1e672578a9a27f4d02ae (patch) | |
| tree | 32f37f35e077425a73e7cc7ad89a4c192442dbaf | |
| parent | 3e671cc5ce6612d8a67495a107df5ff8091113ea (diff) | |
pkg/cover: pass VM type for report generator
This will be needed for gVisor reports,
the target is "linux" but VM type is "gvisor".
| -rw-r--r-- | pkg/cover/backend/backend.go | 2 | ||||
| -rw-r--r-- | pkg/cover/report.go | 4 | ||||
| -rw-r--r-- | pkg/cover/report_test.go | 2 | ||||
| -rw-r--r-- | syz-manager/cover.go | 12 | ||||
| -rw-r--r-- | syz-manager/covfilter.go | 2 | ||||
| -rw-r--r-- | syz-manager/html.go | 6 | ||||
| -rw-r--r-- | tools/syz-cover/syz-cover.go | 3 |
7 files changed, 17 insertions, 14 deletions
diff --git a/pkg/cover/backend/backend.go b/pkg/cover/backend/backend.go index c99e40893..1e7a2bc7f 100644 --- a/pkg/cover/backend/backend.go +++ b/pkg/cover/backend/backend.go @@ -30,6 +30,6 @@ type Symbol struct { Symbolized bool } -func Make(target *targets.Target, kernelObject, srcDir, buildDir string) (*Impl, error) { +func Make(target *targets.Target, vm, kernelObject, srcDir, buildDir string) (*Impl, error) { return makeELF(target, kernelObject, srcDir, buildDir) } diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 4c9e9d9d0..56ab949a0 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -26,8 +26,8 @@ type Prog struct { PCs []uint64 } -func MakeReportGenerator(target *targets.Target, kernelObject, srcDir, buildDir string) (*ReportGenerator, error) { - impl, err := backend.Make(target, kernelObject, srcDir, buildDir) +func MakeReportGenerator(target *targets.Target, vm, kernelObject, srcDir, buildDir string) (*ReportGenerator, error) { + impl, err := backend.Make(target, vm, kernelObject, srcDir, buildDir) if err != nil { return nil, err } diff --git a/pkg/cover/report_test.go b/pkg/cover/report_test.go index af6315ed4..2fdf8e4e0 100644 --- a/pkg/cover/report_test.go +++ b/pkg/cover/report_test.go @@ -179,7 +179,7 @@ func generateReport(t *testing.T, target *targets.Target, test Test) ([]byte, [] } defer os.RemoveAll(dir) bin := buildTestBinary(t, target, test, dir) - rg, err := MakeReportGenerator(target, bin, dir, dir) + rg, err := MakeReportGenerator(target, "", bin, dir, dir) if err != nil { return nil, nil, err } diff --git a/syz-manager/cover.go b/syz-manager/cover.go index 69041fe5b..4ccfe6e9b 100644 --- a/syz-manager/cover.go +++ b/syz-manager/cover.go @@ -14,6 +14,7 @@ import ( "time" "github.com/google/syzkaller/pkg/cover" + "github.com/google/syzkaller/pkg/mgrconfig" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/sys/targets" ) @@ -25,18 +26,19 @@ var ( reportGenerator *cover.ReportGenerator ) -func initCover(target *targets.Target, kernelObj, kernelSrc, kernelBuildSrc string) error { +func initCover(cfg *mgrconfig.Config) error { initCoverOnce.Do(func() { - if kernelObj == "" { + if cfg.KernelObj == "" { initCoverError = fmt.Errorf("kernel_obj is not specified") return } - vmlinux := filepath.Join(kernelObj, target.KernelObject) - reportGenerator, initCoverError = cover.MakeReportGenerator(target, vmlinux, kernelSrc, kernelBuildSrc) + vmlinux := filepath.Join(cfg.KernelObj, cfg.SysTarget.KernelObject) + reportGenerator, initCoverError = cover.MakeReportGenerator( + cfg.SysTarget, cfg.Type, vmlinux, cfg.KernelSrc, cfg.KernelBuildSrc) if initCoverError != nil { return } - initCoverVMOffset, initCoverError = getVMOffset(target, vmlinux) + initCoverVMOffset, initCoverError = getVMOffset(cfg.SysTarget, vmlinux) }) return initCoverError } diff --git a/syz-manager/covfilter.go b/syz-manager/covfilter.go index 83ac93228..5b252603e 100644 --- a/syz-manager/covfilter.go +++ b/syz-manager/covfilter.go @@ -24,7 +24,7 @@ func createCoverageFilter(cfg *mgrconfig.Config) (string, map[uint32]uint32, err filter := &cfg.CovFilter if len(filter.Files) != 0 || len(filter.Functions) != 0 { log.Logf(0, "initializing coverage information...") - if err := initCover(cfg.SysTarget, cfg.KernelObj, cfg.KernelSrc, cfg.KernelBuildSrc); err != nil { + if err := initCover(cfg); err != nil { return "", nil, err } if err := initFilesFuncs(pcs, filter.Files, filter.Functions); err != nil { diff --git a/syz-manager/html.go b/syz-manager/html.go index 7427f6209..24126adb5 100644 --- a/syz-manager/html.go +++ b/syz-manager/html.go @@ -214,7 +214,7 @@ func (mgr *Manager) httpCover(w http.ResponseWriter, r *http.Request) { } // Note: initCover is executed without mgr.mu because it takes very long time // (but it only reads config and it protected by initCoverOnce). - if err := initCover(mgr.sysTarget, mgr.cfg.KernelObj, mgr.cfg.KernelSrc, mgr.cfg.KernelBuildSrc); err != nil { + if err := initCover(mgr.cfg); err != nil { http.Error(w, fmt.Sprintf("failed to generate coverage profile: %v", err), http.StatusInternalServerError) return } @@ -286,7 +286,7 @@ func (mgr *Manager) httpFuncCover(w http.ResponseWriter, r *http.Request) { http.Error(w, "coverage is not enabled", http.StatusInternalServerError) return } - if err := initCover(mgr.sysTarget, mgr.cfg.KernelObj, mgr.cfg.KernelSrc, mgr.cfg.KernelBuildSrc); err != nil { + if err := initCover(mgr.cfg); err != nil { http.Error(w, fmt.Sprintf("failed to generate coverage profile: %v", err), http.StatusInternalServerError) return } @@ -392,7 +392,7 @@ func (mgr *Manager) httpReport(w http.ResponseWriter, r *http.Request) { func (mgr *Manager) httpRawCover(w http.ResponseWriter, r *http.Request) { // Note: initCover is executed without mgr.mu because it takes very long time // (but it only reads config and it protected by initCoverOnce). - if err := initCover(mgr.sysTarget, mgr.cfg.KernelObj, mgr.cfg.KernelSrc, mgr.cfg.KernelBuildSrc); err != nil { + if err := initCover(mgr.cfg); err != nil { http.Error(w, initCoverError.Error(), http.StatusInternalServerError) return } diff --git a/tools/syz-cover/syz-cover.go b/tools/syz-cover/syz-cover.go index 64155db1d..8123b00b7 100644 --- a/tools/syz-cover/syz-cover.go +++ b/tools/syz-cover/syz-cover.go @@ -38,6 +38,7 @@ func main() { var ( flagOS = flag.String("os", runtime.GOOS, "target os") flagArch = flag.String("arch", runtime.GOARCH, "target arch") + flagVM = flag.String("vm", "", "VM type") 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") @@ -69,7 +70,7 @@ func main() { failf("%v", err) } kernelObj := filepath.Join(*flagKernelObj, target.KernelObject) - rg, err := cover.MakeReportGenerator(target, kernelObj, *flagKernelSrc, *flagKernelBuildSrc) + rg, err := cover.MakeReportGenerator(target, *flagVM, kernelObj, *flagKernelSrc, *flagKernelBuildSrc) if err != nil { failf("%v", err) } |
