diff --git a/tools/syz-aflow/aflow.go b/tools/syz-aflow/aflow.go index aed7a49bb557..b09c2ccad5f2 100644 --- a/tools/syz-aflow/aflow.go +++ b/tools/syz-aflow/aflow.go @@ -18,6 +18,7 @@ import ( "net/http" "os" "path/filepath" + "strings" "github.com/google/syzkaller/pkg/aflow" _ "github.com/google/syzkaller/pkg/aflow/flow" @@ -121,18 +122,41 @@ func downloadBug(id, inputFile, token string) error { return err } crash := info["crashes"].([]any)[0].(map[string]any) + + repoURL, _ := crash["kernel-source-git"].(string) + + // Clean the URL to end at .git + if dotGitIndex := strings.Index(repoURL, ".git"); dotGitIndex != -1 { + repoURL = repoURL[:dotGitIndex+4] + } + inputs := map[string]any{ "SyzkallerCommit": crash["syzkaller-commit"], + "KernelRepo": repoURL, + "KernelCommit": crash["kernel-source-commit"], + } + + fetchText := func(key string) (string, error) { + path, ok := crash[key].(string) + if !ok || path == "" { + return "", nil + } + return get(path, token) + } + + inputs["ReproSyz"], err = fetchText("syz-reproducer") + if err != nil { + return err } - inputs["ReproSyz"], err = get(crash["syz-reproducer"].(string), token) + inputs["ReproC"], err = fetchText("c-reproducer") if err != nil { return err } - inputs["ReproC"], err = get(crash["c-reproducer"].(string), token) + inputs["KernelConfig"], err = fetchText("kernel-config") if err != nil { return err } - inputs["KernelConfig"], err = get(crash["kernel-config"].(string), token) + inputs["CrashReport"], err = fetchText("crash-report-link") if err != nil { return err }