diff options
| author | Michael Tuexen <tuexen@freebsd.org> | 2018-12-31 19:07:41 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-12-31 19:36:13 +0100 |
| commit | 3d85f48c1449a8fe6db5cef827592f56ee6dcf26 (patch) | |
| tree | b1e8ffdfa82f11b70bfb15f91f2c799b50392d1d | |
| parent | d580c113aaba02633be947c4c1617cfaadb09d99 (diff) | |
syz-manager: Improve the computation of getVMOffset() on FreeBSD
On FreeBSD getVMOffset() always returned 0 instead of 0xffffffff.
This breaks the usage of addr2line. For now, just return always
0xffffffff on FreeBSD, since a more sophisticated logic doesn't
seem to be required by now.
Thanks to Dmitry for pointing out that this functions provides
the prefix address.
| -rw-r--r-- | syz-manager/cover.go | 13 | ||||
| -rw-r--r-- | syz-manager/html.go | 4 |
2 files changed, 10 insertions, 7 deletions
diff --git a/syz-manager/cover.go b/syz-manager/cover.go index 6c05df174..deaac9064 100644 --- a/syz-manager/cover.go +++ b/syz-manager/cover.go @@ -25,7 +25,7 @@ var ( reportGenerator *cover.ReportGenerator ) -func initCover(kernelObj, kernelObjName, kernelSrc, arch string) error { +func initCover(kernelObj, kernelObjName, kernelSrc, arch, OS string) error { if kernelObj == "" { return fmt.Errorf("kernel_obj is not specified") } @@ -35,15 +35,15 @@ func initCover(kernelObj, kernelObjName, kernelSrc, arch string) error { if err != nil { return err } - initCoverVMOffset, err = getVMOffset(vmlinux) + initCoverVMOffset, err = getVMOffset(vmlinux, OS) return err } -func generateCoverHTML(w io.Writer, kernelObj, kernelObjName, kernelSrc, arch string, cov cover.Cover) error { +func generateCoverHTML(w io.Writer, kernelObj, kernelObjName, kernelSrc, arch, OS string, cov cover.Cover) error { if len(cov) == 0 { return fmt.Errorf("no coverage data available") } - initCoverOnce.Do(func() { initCoverError = initCover(kernelObj, kernelObjName, kernelSrc, arch) }) + initCoverOnce.Do(func() { initCoverError = initCover(kernelObj, kernelObjName, kernelSrc, arch, OS) }) if initCoverError != nil { return initCoverError } @@ -54,7 +54,10 @@ func generateCoverHTML(w io.Writer, kernelObj, kernelObjName, kernelSrc, arch st return reportGenerator.Do(w, pcs) } -func getVMOffset(vmlinux string) (uint32, error) { +func getVMOffset(vmlinux, OS string) (uint32, error) { + if OS == "freebsd" { + return 0xffffffff, nil + } out, err := osutil.RunCmd(time.Hour, "", "readelf", "-SW", vmlinux) if err != nil { return 0, err diff --git a/syz-manager/html.go b/syz-manager/html.go index 2a05748f7..3f549b4d7 100644 --- a/syz-manager/html.go +++ b/syz-manager/html.go @@ -248,7 +248,7 @@ func (mgr *Manager) httpCoverCover(w http.ResponseWriter, r *http.Request) { } if err := generateCoverHTML(w, mgr.cfg.KernelObj, mgr.sysTarget.KernelObject, - mgr.cfg.KernelSrc, mgr.cfg.TargetVMArch, cov); err != nil { + mgr.cfg.KernelSrc, mgr.cfg.TargetVMArch, mgr.cfg.TargetOS, cov); err != nil { http.Error(w, fmt.Sprintf("failed to generate coverage profile: %v", err), http.StatusInternalServerError) return } @@ -400,7 +400,7 @@ func (mgr *Manager) httpRawCover(w http.ResponseWriter, r *http.Request) { initCoverOnce.Do(func() { initCoverError = initCover(mgr.cfg.KernelObj, mgr.sysTarget.KernelObject, - mgr.cfg.KernelSrc, mgr.cfg.TargetArch) + mgr.cfg.KernelSrc, mgr.cfg.TargetArch, mgr.cfg.TargetOS) }) if initCoverError != nil { http.Error(w, initCoverError.Error(), http.StatusInternalServerError) |
