From f69c5fcd766adfb7894e1b0cd35f42c633f16419 Mon Sep 17 00:00:00 2001 From: Jiangen Jiao Date: Mon, 23 Jul 2018 14:11:45 +0800 Subject: syz-manager: Support kernelSrc and vmlinux from different tree If vmlinux built from different tree from kernelSrc, cover page will failed to show. So match only the path without prefix. --- CONTRIBUTORS | 1 + syz-manager/cover.go | 8 ++++++-- syz-manager/html.go | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 9825f3c61..9e2c8005f 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -33,3 +33,4 @@ Mitchell Horne Denis Efremov Ondrej Mosnacek Daniel Borkmann +Joey Jiao diff --git a/syz-manager/cover.go b/syz-manager/cover.go index 953fa3b84..c007c15f3 100644 --- a/syz-manager/cover.go +++ b/syz-manager/cover.go @@ -70,7 +70,7 @@ func initCover(kernelObj, arch string) error { return err } -func generateCoverHTML(w io.Writer, kernelObj, arch string, cov cover.Cover) error { +func generateCoverHTML(w io.Writer, kernelObj, kernelSrc, arch string, cov cover.Cover) error { if len(cov) == 0 { return fmt.Errorf("no coverage data available") } @@ -106,6 +106,10 @@ func generateCoverHTML(w io.Writer, kernelObj, arch string, cov cover.Cover) err var d templateData for f, covered := range fileSet(coveredFrames, uncoveredFrames) { + remain := strings.TrimPrefix(f, prefix) + if kernelSrc != "" { + f = filepath.Join(kernelSrc, remain) + } lines, err := parseFile(f) if err != nil { return err @@ -130,7 +134,7 @@ func generateCoverHTML(w io.Writer, kernelObj, arch string, cov cover.Cover) err buf.Write([]byte{'\n'}) } } - f = filepath.Clean(strings.TrimPrefix(f, prefix)) + f = filepath.Clean(remain) d.Files = append(d.Files, &templateFile{ ID: hash.String([]byte(f)), Name: f, diff --git a/syz-manager/html.go b/syz-manager/html.go index b17d9b48f..a84b71d01 100644 --- a/syz-manager/html.go +++ b/syz-manager/html.go @@ -231,7 +231,7 @@ func (mgr *Manager) httpCoverCover(w http.ResponseWriter, r *http.Request) { } } - if err := generateCoverHTML(w, mgr.cfg.KernelObj, mgr.cfg.TargetVMArch, cov); err != nil { + if err := generateCoverHTML(w, mgr.cfg.KernelObj, mgr.cfg.KernelSrc, mgr.cfg.TargetVMArch, cov); err != nil { http.Error(w, fmt.Sprintf("failed to generate coverage profile: %v", err), http.StatusInternalServerError) return } -- cgit mrf-deployment