aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-09-15 10:15:00 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-09-15 16:02:37 +0200
commit539e603206f427ff6549cde661fef0205a4c9034 (patch)
treede4cd1db71fc293582ad495f4d8cc16f196c6827 /sys
parent19f9bc13d374058b83b2712f119bb42559b35c0c (diff)
syz-manager, syz-fuzzer, executor: ensure that binaries are consistent
Check that manager/fuzzer/executor are build on the same git revision, use the same syscall descriptions and the same target arch. Update #336
Diffstat (limited to 'sys')
-rw-r--r--sys/linux/386.go4
-rw-r--r--sys/linux/amd64.go4
-rw-r--r--sys/linux/arm.go4
-rw-r--r--sys/linux/arm64.go4
-rw-r--r--sys/linux/init.go3
-rw-r--r--sys/linux/ppc64le.go4
-rw-r--r--sys/sys.go3
-rw-r--r--sys/syz-sysgen/sysgen.go27
8 files changed, 38 insertions, 15 deletions
diff --git a/sys/linux/386.go b/sys/linux/386.go
index 60842fd78..edce34ee9 100644
--- a/sys/linux/386.go
+++ b/sys/linux/386.go
@@ -4,7 +4,7 @@ package linux
import . "github.com/google/syzkaller/prog"
func init() {
- initArch(syscalls_386, resources_386, structDescs_386, consts_386, "386", 4)
+ initArch(revision_386, syscalls_386, resources_386, structDescs_386, consts_386, "386", 4)
}
var resources_386 = []*ResourceDesc{
@@ -17186,3 +17186,5 @@ var consts_386 = []ConstValue{
{Name: "__WCLONE", Value: 2147483648},
{Name: "__WNOTHREAD", Value: 536870912},
}
+
+const revision_386 = "fb26afa29ccd7317f2c0796cf1386b493eeb955f"
diff --git a/sys/linux/amd64.go b/sys/linux/amd64.go
index 5a64db3e7..53f1aacc4 100644
--- a/sys/linux/amd64.go
+++ b/sys/linux/amd64.go
@@ -4,7 +4,7 @@ package linux
import . "github.com/google/syzkaller/prog"
func init() {
- initArch(syscalls_amd64, resources_amd64, structDescs_amd64, consts_amd64, "amd64", 8)
+ initArch(revision_amd64, syscalls_amd64, resources_amd64, structDescs_amd64, consts_amd64, "amd64", 8)
}
var resources_amd64 = []*ResourceDesc{
@@ -17268,3 +17268,5 @@ var consts_amd64 = []ConstValue{
{Name: "__WCLONE", Value: 2147483648},
{Name: "__WNOTHREAD", Value: 536870912},
}
+
+const revision_amd64 = "c14ec0f07c2984481a0bf1453ea928549382eb25"
diff --git a/sys/linux/arm.go b/sys/linux/arm.go
index 3eb900c60..b364bdc71 100644
--- a/sys/linux/arm.go
+++ b/sys/linux/arm.go
@@ -4,7 +4,7 @@ package linux
import . "github.com/google/syzkaller/prog"
func init() {
- initArch(syscalls_arm, resources_arm, structDescs_arm, consts_arm, "arm", 4)
+ initArch(revision_arm, syscalls_arm, resources_arm, structDescs_arm, consts_arm, "arm", 4)
}
var resources_arm = []*ResourceDesc{
@@ -17140,3 +17140,5 @@ var consts_arm = []ConstValue{
{Name: "__WCLONE", Value: 2147483648},
{Name: "__WNOTHREAD", Value: 536870912},
}
+
+const revision_arm = "f73cb445fdead3417b165eec037a0d892cc3253e"
diff --git a/sys/linux/arm64.go b/sys/linux/arm64.go
index f82fa3974..8f90a0822 100644
--- a/sys/linux/arm64.go
+++ b/sys/linux/arm64.go
@@ -4,7 +4,7 @@ package linux
import . "github.com/google/syzkaller/prog"
func init() {
- initArch(syscalls_arm64, resources_arm64, structDescs_arm64, consts_arm64, "arm64", 8)
+ initArch(revision_arm64, syscalls_arm64, resources_arm64, structDescs_arm64, consts_arm64, "arm64", 8)
}
var resources_arm64 = []*ResourceDesc{
@@ -17182,3 +17182,5 @@ var consts_arm64 = []ConstValue{
{Name: "__WCLONE", Value: 2147483648},
{Name: "__WNOTHREAD", Value: 536870912},
}
+
+const revision_arm64 = "72353a7ede1fe6cb903fcb02eb5eb11407bea5d8"
diff --git a/sys/linux/init.go b/sys/linux/init.go
index cbf93e963..509e2ab04 100644
--- a/sys/linux/init.go
+++ b/sys/linux/init.go
@@ -9,12 +9,13 @@ import (
"github.com/google/syzkaller/prog"
)
-func initArch(syscalls []*prog.Syscall, resources []*prog.ResourceDesc,
+func initArch(rev string, syscalls []*prog.Syscall, resources []*prog.ResourceDesc,
structDescs []*prog.KeyedStruct, consts []prog.ConstValue, archName string, ptrSize uint64) {
arch := makeArch(syscalls, resources, structDescs, consts, archName)
target := &prog.Target{
OS: "linux",
Arch: archName,
+ Revision: rev,
PtrSize: ptrSize,
PageSize: pageSize,
DataOffset: dataOffset,
diff --git a/sys/linux/ppc64le.go b/sys/linux/ppc64le.go
index b1b9459ed..aa0f691a7 100644
--- a/sys/linux/ppc64le.go
+++ b/sys/linux/ppc64le.go
@@ -4,7 +4,7 @@ package linux
import . "github.com/google/syzkaller/prog"
func init() {
- initArch(syscalls_ppc64le, resources_ppc64le, structDescs_ppc64le, consts_ppc64le, "ppc64le", 8)
+ initArch(revision_ppc64le, syscalls_ppc64le, resources_ppc64le, structDescs_ppc64le, consts_ppc64le, "ppc64le", 8)
}
var resources_ppc64le = []*ResourceDesc{
@@ -17172,3 +17172,5 @@ var consts_ppc64le = []ConstValue{
{Name: "__WCLONE", Value: 2147483648},
{Name: "__WNOTHREAD", Value: 536870912},
}
+
+const revision_ppc64le = "cec4f3697757a69ac044be83bac5ba45df7f2fbf"
diff --git a/sys/sys.go b/sys/sys.go
index 7f52504fe..3ab982fdb 100644
--- a/sys/sys.go
+++ b/sys/sys.go
@@ -74,3 +74,6 @@ func init() {
}
}
}
+
+// Emitted by Makefile.
+var GitRevision string
diff --git a/sys/syz-sysgen/sysgen.go b/sys/syz-sysgen/sysgen.go
index ce88cb539..ea3e3e110 100644
--- a/sys/syz-sysgen/sysgen.go
+++ b/sys/syz-sysgen/sysgen.go
@@ -21,6 +21,7 @@ import (
"github.com/google/syzkaller/pkg/ast"
"github.com/google/syzkaller/pkg/compiler"
+ "github.com/google/syzkaller/pkg/hash"
"github.com/google/syzkaller/pkg/serializer"
"github.com/google/syzkaller/prog"
"github.com/google/syzkaller/sys"
@@ -79,9 +80,11 @@ func main() {
sysFile := filepath.Join("sys", OS, job.Target.Arch+".go")
out := new(bytes.Buffer)
generate(job.Target, prog, consts, out)
+ rev := hash.String(out.Bytes())
+ fmt.Fprintf(out, "const revision_%v = %q\n", job.Target.Arch, rev)
writeSource(sysFile, out.Bytes())
- job.ArchData = generateExecutorSyscalls(job.Target, prog.Syscalls)
+ job.ArchData = generateExecutorSyscalls(job.Target, prog.Syscalls, rev)
job.OK = true
}()
}
@@ -132,8 +135,8 @@ func generate(target *sys.Target, prg *compiler.Prog, consts map[string]uint64,
fmt.Fprintf(out, "import . \"github.com/google/syzkaller/prog\"\n\n")
fmt.Fprintf(out, "func init() {\n")
- fmt.Fprintf(out, "\tinitArch(syscalls_%v, resources_%v, structDescs_%v, consts_%v, %q, %v)\n",
- target.Arch, target.Arch, target.Arch, target.Arch, target.Arch, target.PtrSize)
+ fmt.Fprintf(out, "\tinitArch(revision_%v, syscalls_%v, resources_%v, structDescs_%v, consts_%v, %q, %v)\n",
+ target.Arch, target.Arch, target.Arch, target.Arch, target.Arch, target.Arch, target.PtrSize)
fmt.Fprintf(out, "}\n\n")
fmt.Fprintf(out, "var resources_%v = ", target.Arch)
@@ -157,21 +160,25 @@ func generate(target *sys.Target, prg *compiler.Prog, consts map[string]uint64,
})
fmt.Fprintf(out, "var consts_%v = ", target.Arch)
serializer.Write(out, constArr)
- fmt.Fprintf(out, "\n")
+ fmt.Fprintf(out, "\n\n")
}
-func generateExecutorSyscalls(target *sys.Target, syscalls []*prog.Syscall) []byte {
+func generateExecutorSyscalls(target *sys.Target, syscalls []*prog.Syscall, rev string) []byte {
type SyscallData struct {
Name string
NR int32
}
type ArchData struct {
- CARCH []string
- Calls []SyscallData
- Fake []SyscallData
+ Revision string
+ GOARCH string
+ CARCH []string
+ Calls []SyscallData
+ Fake []SyscallData
}
data := ArchData{
- CARCH: target.CArch,
+ Revision: rev,
+ GOARCH: target.Arch,
+ CARCH: target.CArch,
}
fake := make(map[string]uint64)
for _, c := range syscalls {
@@ -247,6 +254,8 @@ struct call_t {
var archTempl = template.Must(template.New("").Parse(`
#if {{range $cdef := $.CARCH}}defined({{$cdef}}) || {{end}}0
+#define GOARCH "{{.GOARCH}}"
+#define SYZ_REVISION "{{.Revision}}"
{{range $c := $.Fake}}#define __NR_{{$c.Name}} {{$c.NR}}
{{end}}
static call_t syscalls[] = {