aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-kcidb
diff options
context:
space:
mode:
authorDenys Fedoryshchenko <denys.f@collabora.com>2025-09-30 11:45:15 +0300
committerAleksandr Nogikh <nogikh@google.com>2025-10-06 08:29:13 +0000
commit91305dbed501aca571ad5dbf0f1f1d7847966052 (patch)
tree3b18f1dd3b3c4a4c12173b88293457f73009d349 /tools/syz-kcidb
parentfd070483688b68ab7c0fef4bfbf2cdc2defd5f63 (diff)
tools/syz-kcidb: add -input and -output flags for testing
Add -input and -output flags to syz-kcidb to allow for faster and easier testing of KCIDB submissions. With these flags, it's possible to use a local JSON file as input for a bug report and to save the resulting KCIDB submission locally. This removes the need for communication with the dashboard and KCIDB, which simplifies testing and development. Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
Diffstat (limited to 'tools/syz-kcidb')
-rw-r--r--tools/syz-kcidb/kcidb.go45
1 files changed, 36 insertions, 9 deletions
diff --git a/tools/syz-kcidb/kcidb.go b/tools/syz-kcidb/kcidb.go
index 8d1255cce..429059060 100644
--- a/tools/syz-kcidb/kcidb.go
+++ b/tools/syz-kcidb/kcidb.go
@@ -5,7 +5,9 @@ package main
import (
"context"
+ "encoding/json"
"flag"
+ "os"
"github.com/google/syzkaller/dashboard/dashapi"
"github.com/google/syzkaller/pkg/kcidb"
@@ -25,16 +27,33 @@ func main() {
flagDashAddr = flag.String("addr", "", "dashboard address")
flagDashKey = flag.String("key", "", "dashboard API key")
flagBug = flag.String("bug", "", "bug ID to upload to KCIDB")
+ flagInput = flag.String("input", "", "input JSON file with bug report")
+ flagOutput = flag.String("output", "", "output JSON file for KCIDB data")
)
flag.Parse()
- dash, err := dashapi.New(*flagDashClient, *flagDashAddr, *flagDashKey)
- if err != nil {
- tool.Fail(err)
- }
- bug, err := dash.LoadBug(*flagBug)
- if err != nil {
- tool.Fail(err)
+ var bug *dashapi.BugReport
+
+ // If input file is specified, read from file instead of calling API
+ if *flagInput != "" {
+ data, err := os.ReadFile(*flagInput)
+ if err != nil {
+ tool.Fail(err)
+ }
+ bug = &dashapi.BugReport{}
+ if err := json.Unmarshal(data, bug); err != nil {
+ tool.Fail(err)
+ }
+ } else {
+ // Original behavior: fetch from dashboard API
+ dash, err := dashapi.New(*flagDashClient, *flagDashAddr, *flagDashKey)
+ if err != nil {
+ tool.Fail(err)
+ }
+ bug, err = dash.LoadBug(*flagBug)
+ if err != nil {
+ tool.Fail(err)
+ }
}
kcidb.Validate = true
@@ -44,7 +63,15 @@ func main() {
}
defer client.Close()
- if err := client.Publish(bug); err != nil {
- tool.Fail(err)
+ // If output file is specified, write to file instead of submitting.
+ if *flagOutput != "" {
+ if err := client.PublishToFile(bug, *flagOutput); err != nil {
+ tool.Fail(err)
+ }
+ } else {
+ // Original behavior: submit to REST API
+ if err := client.Publish(bug); err != nil {
+ tool.Fail(err)
+ }
}
}