mirror of
https://github.com/reactos/syzkaller.git
synced 2024-10-07 09:03:28 +00:00
tools/syz-runtest: test program parsing before booting VMs
It sucks to wait for VMs to boot just to discover that programs don't parse.
This commit is contained in:
parent
593b260b02
commit
c7ba317e9b
@ -208,11 +208,20 @@ func (ctx *Context) generatePrograms(progs chan *RunRequest) error {
|
||||
}
|
||||
|
||||
func (ctx *Context) parseProg(filename string) (*prog.Prog, map[string]bool, *ipc.ProgInfo, error) {
|
||||
data, err := ioutil.ReadFile(filepath.Join(ctx.Dir, filename))
|
||||
return parseProg(ctx.Target, ctx.Dir, filename)
|
||||
}
|
||||
|
||||
func TestParseProg(target *prog.Target, dir, filename string) error {
|
||||
_, _, _, err := parseProg(target, dir, filename)
|
||||
return err
|
||||
}
|
||||
|
||||
func parseProg(target *prog.Target, dir, filename string) (*prog.Prog, map[string]bool, *ipc.ProgInfo, error) {
|
||||
data, err := ioutil.ReadFile(filepath.Join(dir, filename))
|
||||
if err != nil {
|
||||
return nil, nil, nil, fmt.Errorf("failed to read %v: %v", filename, err)
|
||||
}
|
||||
p, err := ctx.Target.Deserialize(data, prog.Strict)
|
||||
p, err := target.Deserialize(data, prog.Strict)
|
||||
if err != nil {
|
||||
return nil, nil, nil, fmt.Errorf("failed to deserialize %v: %v", filename, err)
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import (
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@ -44,6 +45,10 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
testDir := filepath.Join(cfg.Syzkaller, "sys", target.OS, "test")
|
||||
if err := testParsing(target, testDir); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
vmPool, err := vm.Create(cfg, *flagDebug)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@ -111,7 +116,7 @@ func main() {
|
||||
fmt.Printf("%-24v: %v calls enabled\n", sandbox+" sandbox", len(calls))
|
||||
}
|
||||
ctx := &runtest.Context{
|
||||
Dir: filepath.Join(cfg.Syzkaller, "sys", target.OS, "test"),
|
||||
Dir: testDir,
|
||||
Target: target,
|
||||
Features: mgr.checkResult.Features,
|
||||
EnabledCalls: enabledCalls,
|
||||
@ -268,3 +273,19 @@ func (mgr *Manager) Done(a *rpctype.RunTestDoneArgs, r *int) error {
|
||||
close(req.Done)
|
||||
return nil
|
||||
}
|
||||
|
||||
func testParsing(target *prog.Target, dir string) error {
|
||||
files, err := ioutil.ReadDir(dir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read %v: %v", dir, err)
|
||||
}
|
||||
for _, file := range files {
|
||||
if strings.HasSuffix(file.Name(), "~") {
|
||||
continue
|
||||
}
|
||||
if err := runtest.TestParseProg(target, dir, file.Name()); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user