aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-12-11 12:35:41 +0100
committerDmitry Vyukov <dvyukov@google.com>2020-12-13 18:56:36 +0100
commit7268cf9dbd7bb12380df1e672578a9a27f4d02ae (patch)
tree32f37f35e077425a73e7cc7ad89a4c192442dbaf
parent3e671cc5ce6612d8a67495a107df5ff8091113ea (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.go2
-rw-r--r--pkg/cover/report.go4
-rw-r--r--pkg/cover/report_test.go2
-rw-r--r--syz-manager/cover.go12
-rw-r--r--syz-manager/covfilter.go2
-rw-r--r--syz-manager/html.go6
-rw-r--r--tools/syz-cover/syz-cover.go3
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)
}