diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-06-30 15:07:43 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-06-30 15:17:42 +0200 |
| commit | 51a013e7b9de4b78d9609dd72db8fb5ca895ef79 (patch) | |
| tree | 5918a55c88c76aed53d563cd5bf0a99eb2c2a0ea /tools | |
| parent | a7785e15baa35b8d26d5c89cc8e45bc17248afa7 (diff) | |
tools/syz-symbolize: add report mode
Currently syz-symbolize symbolizes whole input file.
Add a new mode (controlled with -report flag) when
it prints report as would be extracted by syz-manager.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/syz-symbolize/symbolize.go | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/tools/syz-symbolize/symbolize.go b/tools/syz-symbolize/symbolize.go index 606cccfe2..c36ee8dab 100644 --- a/tools/syz-symbolize/symbolize.go +++ b/tools/syz-symbolize/symbolize.go @@ -14,7 +14,9 @@ import ( ) var ( - flagLinux = flag.String("linux", "", "path to linux") + flagKernelSrc = flag.String("kernel_src", "", "path to kernel sources") + flagKernelObj = flag.String("kernel_obj", "", "path to kernel build dir") + flagReport = flag.Bool("report", false, "extract report from the log") ) func main() { @@ -24,18 +26,43 @@ func main() { flag.PrintDefaults() os.Exit(1) } + if *flagKernelSrc == "" { + *flagKernelSrc = *flagKernelObj + } text, err := ioutil.ReadFile(flag.Args()[0]) if err != nil { fmt.Fprintf(os.Stderr, "failed to open input file: %v\n", err) os.Exit(1) } - if console := report.ExtractConsoleOutput(text); len(console) != 0 { - text = console - } - text, err = report.Symbolize(filepath.Join(*flagLinux, "vmlinux"), text, nil) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to symbolize: %v\n", err) - os.Exit(1) + if *flagReport { + desc, text, _, _ := report.Parse(text, nil) + text, err = report.Symbolize(filepath.Join(*flagKernelObj, "vmlinux"), text, nil) + if err != nil { + fmt.Fprintf(os.Stderr, "failed to symbolize: %v\n", err) + os.Exit(1) + } + guiltyFile := report.ExtractGuiltyFile(text) + fmt.Printf("%v\n\n", desc) + os.Stdout.Write(text) + fmt.Printf("\n") + fmt.Printf("guilty file: %v\n", guiltyFile) + if guiltyFile != "" { + maintainers, err := report.GetMaintainers(*flagKernelSrc, guiltyFile) + if err != nil { + fmt.Fprintf(os.Stderr, "failed to get maintainers: %v\n", err) + os.Exit(1) + } + fmt.Printf("maintainers: %v\n", maintainers) + } + } else { + if console := report.ExtractConsoleOutput(text); len(console) != 0 { + text = console + } + text, err = report.Symbolize(filepath.Join(*flagKernelObj, "vmlinux"), text, nil) + if err != nil { + fmt.Fprintf(os.Stderr, "failed to symbolize: %v\n", err) + os.Exit(1) + } + os.Stdout.Write(text) } - os.Stdout.Write(text) } |
