aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-06-30 15:07:43 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-06-30 15:17:42 +0200
commit51a013e7b9de4b78d9609dd72db8fb5ca895ef79 (patch)
tree5918a55c88c76aed53d563cd5bf0a99eb2c2a0ea /tools
parenta7785e15baa35b8d26d5c89cc8e45bc17248afa7 (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.go45
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)
}