diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-12-07 12:48:59 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-12-07 12:56:38 +0100 |
| commit | eada53b810e964b4a71c20ab023020f281855fe9 (patch) | |
| tree | 2bbe4b59b3867ab531a3ea1e0dcc72e089892c50 /tools | |
| parent | 9e8a45fe27025af392abd366d8d31a9be4661ea9 (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')
| -rw-r--r-- | tools/syz-trace2syz/proggen/proggen.go | 2 | ||||
| -rw-r--r-- | tools/syz-trace2syz/proggen/proggen_test.go | 10 |
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` |
