diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2016-08-28 16:33:32 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2016-08-28 16:33:32 +0200 |
| commit | 8278953eb4abb4fb147f6f06cd9bdcf1eff7e84d (patch) | |
| tree | 171e6ee53a3ed08660df8ba7a6fbff5373fd1464 /csource/csource.go | |
| parent | 58b2762fed21612145a1e21051adf13d55a79d98 (diff) | |
csource: teach how to execute pseudo syz_ syscalls
Update #59
Diffstat (limited to 'csource/csource.go')
| -rw-r--r-- | csource/csource.go | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/csource/csource.go b/csource/csource.go index 214483c5d..28be9e22a 100644 --- a/csource/csource.go +++ b/csource/csource.go @@ -1,7 +1,7 @@ // Copyright 2015 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. -//go:generate bash -c "echo -e '// AUTOGENERATED FROM executor/common.h\npackage csource\nvar commonHeader = `' > common.go; cat ../executor/common.h | grep -v // >> common.go; echo '`' >> common.go" +//go:generate bash -c "echo -e '// AUTOGENERATED FROM executor/common.h\npackage csource\nvar commonHeader = `' > common.go; cat ../executor/common.h | egrep -v '^[ ]*//' | sed 's#[ ]*//.*##g' >> common.go; echo '`' >> common.go" package csource @@ -27,23 +27,27 @@ func Write(p *prog.Prog, opts Options) []byte { exec := p.SerializeForExec() w := new(bytes.Buffer) - fmt.Fprint(w, "// autogenerated by syzkaller (http://github.com/google/syzkaller)\n") - fmt.Fprint(w, commonHeader) - fmt.Fprint(w, "\n") + fmt.Fprint(w, "// autogenerated by syzkaller (http://github.com/google/syzkaller)\n\n") - handled := make(map[string]bool) + handled := make(map[string]int) for _, c := range p.Calls { - name := c.Meta.CallName - if handled[name] { - continue + handled[c.Meta.CallName] = c.Meta.NR + } + for _, c := range sys.Calls { + if strings.HasPrefix(c.CallName, "syz_") { + handled[c.CallName] = c.NR } - handled[name] = true - fmt.Fprintf(w, "#ifndef SYS_%v\n", name) - fmt.Fprintf(w, "#define SYS_%v %v\n", name, c.Meta.NR) + } + for name, nr := range handled { + fmt.Fprintf(w, "#ifndef __NR_%v\n", name) + fmt.Fprintf(w, "#define __NR_%v %v\n", name, nr) fmt.Fprintf(w, "#endif\n") } fmt.Fprintf(w, "\n") + fmt.Fprint(w, commonHeader) + fmt.Fprint(w, "\n") + calls, nvar := generateCalls(exec) fmt.Fprintf(w, "long r[%v];\n", nvar) @@ -166,7 +170,7 @@ loop: // Normal syscall. newCall() meta := sys.Calls[instr] - fmt.Fprintf(w, "\tr[%v] = syscall(SYS_%v", n, meta.CallName) + fmt.Fprintf(w, "\tr[%v] = execute_syscall(__NR_%v", n, meta.CallName) nargs := read() for i := uintptr(0); i < nargs; i++ { typ := read() @@ -181,7 +185,7 @@ loop: panic("unknown arg type") } } - for i := nargs; i < 6; i++ { + for i := nargs; i < 9; i++ { fmt.Fprintf(w, ", 0") } fmt.Fprintf(w, ");\n") |
