tools/syz-execprog: split overly large function

Update #538
This commit is contained in:
Dmitry Vyukov 2018-05-07 15:51:00 +02:00
parent 55a5e98a0a
commit 3f70522c7e

View File

@ -48,54 +48,12 @@ func main() {
log.Fatalf("%v", err)
}
var entries []*prog.LogEntry
for _, fn := range flag.Args() {
data, err := ioutil.ReadFile(fn)
if err != nil {
log.Fatalf("failed to read log file: %v", err)
}
entries = append(entries, target.ParseLog(data)...)
}
log.Logf(0, "parsed %v programs", len(entries))
entries := loadPrograms(target, flag.Args())
if len(entries) == 0 {
return
}
config, execOpts, err := ipc.DefaultConfig()
if err != nil {
log.Fatalf("%v", err)
}
if config.Flags&ipc.FlagSignal != 0 {
execOpts.Flags |= ipc.FlagCollectCover
}
if *flagCoverFile != "" {
config.Flags |= ipc.FlagSignal
execOpts.Flags |= ipc.FlagCollectCover
execOpts.Flags &^= ipc.FlagDedupCover
}
if *flagHints {
if execOpts.Flags&ipc.FlagCollectCover != 0 {
execOpts.Flags ^= ipc.FlagCollectCover
}
execOpts.Flags |= ipc.FlagCollectComps
}
if *flagFaultCall >= 0 {
config.Flags |= ipc.FlagEnableFault
execOpts.Flags |= ipc.FlagInjectFault
execOpts.FaultCall = *flagFaultCall
execOpts.FaultNth = *flagFaultNth
}
handled := make(map[string]bool)
for _, entry := range entries {
for _, call := range entry.P.Calls {
handled[call.Meta.CallName] = true
}
}
if handled["syz_emit_ethernet"] || handled["syz_extract_tcp_res"] {
config.Flags |= ipc.FlagEnableTun
}
config, execOpts := createConfig(entries)
var wg sync.WaitGroup
wg.Add(*flagProcs)
@ -223,3 +181,53 @@ func main() {
osutil.HandleInterrupts(shutdown)
wg.Wait()
}
func loadPrograms(target *prog.Target, files []string) []*prog.LogEntry {
var entries []*prog.LogEntry
for _, fn := range files {
data, err := ioutil.ReadFile(fn)
if err != nil {
log.Fatalf("failed to read log file: %v", err)
}
entries = append(entries, target.ParseLog(data)...)
}
log.Logf(0, "parsed %v programs", len(entries))
return entries
}
func createConfig(entries []*prog.LogEntry) (*ipc.Config, *ipc.ExecOpts) {
config, execOpts, err := ipc.DefaultConfig()
if err != nil {
log.Fatalf("%v", err)
}
if config.Flags&ipc.FlagSignal != 0 {
execOpts.Flags |= ipc.FlagCollectCover
}
if *flagCoverFile != "" {
config.Flags |= ipc.FlagSignal
execOpts.Flags |= ipc.FlagCollectCover
execOpts.Flags &^= ipc.FlagDedupCover
}
if *flagHints {
if execOpts.Flags&ipc.FlagCollectCover != 0 {
execOpts.Flags ^= ipc.FlagCollectCover
}
execOpts.Flags |= ipc.FlagCollectComps
}
if *flagFaultCall >= 0 {
config.Flags |= ipc.FlagEnableFault
execOpts.Flags |= ipc.FlagInjectFault
execOpts.FaultCall = *flagFaultCall
execOpts.FaultNth = *flagFaultNth
}
handled := make(map[string]bool)
for _, entry := range entries {
for _, call := range entry.P.Calls {
handled[call.Meta.CallName] = true
}
}
if handled["syz_emit_ethernet"] || handled["syz_extract_tcp_res"] {
config.Flags |= ipc.FlagEnableTun
}
return config, execOpts
}