aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-trace2syz
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-12-07 12:48:59 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-12-07 12:56:38 +0100
commiteada53b810e964b4a71c20ab023020f281855fe9 (patch)
tree2bbe4b59b3867ab531a3ea1e0dcc72e089892c50 /tools/syz-trace2syz
parent9e8a45fe27025af392abd366d8d31a9be4661ea9 (diff)
tools/syz-trace2syz/proggen: fix vma allocation
There are 2 bugs: 1. We always allocate 1 page, even if use more. 2. VMA addresses are not aligned, so most mmap-like functions fail with EINVAL. The added test currently panics with "unaligned vma address".
Diffstat (limited to 'tools/syz-trace2syz')
-rw-r--r--tools/syz-trace2syz/proggen/proggen.go2
-rw-r--r--tools/syz-trace2syz/proggen/proggen_test.go10
2 files changed, 11 insertions, 1 deletions
diff --git a/tools/syz-trace2syz/proggen/proggen.go b/tools/syz-trace2syz/proggen/proggen.go
index 967167fe9..a1394d057 100644
--- a/tools/syz-trace2syz/proggen/proggen.go
+++ b/tools/syz-trace2syz/proggen/proggen.go
@@ -167,7 +167,7 @@ func genVma(syzType *prog.VmaType, _ parser.IrType, ctx *Context) prog.Arg {
if syzType.RangeBegin != 0 || syzType.RangeEnd != 0 {
npages = syzType.RangeEnd
}
- return prog.MakeVmaPointerArg(syzType, ctx.pg.Allocate(ctx.Target.PageSize), npages)
+ return prog.MakeVmaPointerArg(syzType, ctx.pg.AllocateVMA(npages), npages)
}
func genArray(syzType *prog.ArrayType, traceType parser.IrType, ctx *Context) prog.Arg {
diff --git a/tools/syz-trace2syz/proggen/proggen_test.go b/tools/syz-trace2syz/proggen/proggen_test.go
index 1e7a5f3a6..8f56de2d5 100644
--- a/tools/syz-trace2syz/proggen/proggen_test.go
+++ b/tools/syz-trace2syz/proggen/proggen_test.go
@@ -62,6 +62,16 @@ func TestParseTraceBasic(t *testing.T) {
}
}
+func TestParseVMA(t *testing.T) {
+ test := `pipe({0x0, 0x1}) = 0
+ shmget(0x0, 0x1, 0x2, 0x3) = 0`
+ p := parseSingleTrace(t, test)
+ expectedSeq := "pipe-shmget"
+ if p.String() != expectedSeq {
+ t.Fatalf("expected: %s != %s", expectedSeq, p.String())
+ }
+}
+
func TestParseTraceInnerResource(t *testing.T) {
test := `pipe([5,6]) = 0
write(6, "\xff\xff\xfe\xff", 4) = 4`