github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/tools/syz-diff/diff.go (about) 1 // Copyright 2024 syzkaller project authors. All rights reserved. 2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 package main 5 6 import ( 7 "flag" 8 "os" 9 10 "github.com/google/syzkaller/pkg/log" 11 "github.com/google/syzkaller/pkg/manager" 12 "github.com/google/syzkaller/pkg/mgrconfig" 13 "github.com/google/syzkaller/prog" 14 "github.com/google/syzkaller/vm" 15 ) 16 17 var ( 18 flagBaseConfig = flag.String("base", "", "base config") 19 flagNewConfig = flag.String("new", "", "new config (treated as the main one)") 20 flagDebug = flag.Bool("debug", false, "dump all VM output to console") 21 flagPatch = flag.String("patch", "", "a git patch") 22 ) 23 24 func main() { 25 if !prog.GitRevisionKnown() { 26 log.Fatalf("bad syz-diff build: build with make, run bin/syz-diff") 27 } 28 flag.Parse() 29 log.EnableLogCaching(1000, 1<<20) 30 31 baseCfg, err := mgrconfig.LoadFile(*flagBaseConfig) 32 if err != nil { 33 log.Fatalf("base config: %v", err) 34 } 35 36 newCfg, err := mgrconfig.LoadFile(*flagNewConfig) 37 if err != nil { 38 log.Fatalf("new config: %v", err) 39 } 40 41 if *flagPatch != "" { 42 data, err := os.ReadFile(*flagPatch) 43 if err != nil { 44 log.Fatal(err) 45 } 46 manager.PatchFocusAreas(newCfg, [][]byte{data}, nil, nil) 47 } 48 49 ctx := vm.ShutdownCtx() 50 err = manager.RunDiffFuzzer(ctx, baseCfg, newCfg, manager.DiffFuzzerConfig{ 51 Store: &manager.DiffFuzzerStore{BasePath: newCfg.Workdir}, 52 Debug: *flagDebug, 53 }) 54 if err != nil { 55 log.Fatal(err) 56 } 57 }