From d8b0de2df3c9646b9b4d160f1ea6b678381d23be Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Tue, 8 Aug 2017 16:50:22 +0200 Subject: prog: reduce the "uber-mmap" size During minimization we create a single memory mapping that contains all the smaller mmap() ranges, so that other mmap() calls can be dropped. This "uber-mmap" used to start at 0x7f0000000000 regardless of where the smaller mappings were located. Change its starting address to the beginning of the first small mmap() range. --- prog/mutation.go | 6 +++++- prog/mutation_test.go | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/prog/mutation.go b/prog/mutation.go index 98e7e567d..853e7141d 100644 --- a/prog/mutation.go +++ b/prog/mutation.go @@ -270,9 +270,13 @@ func Minimize(p0 *Prog, callIndex0 int, pred func(*Prog, int) bool, crash bool) // Try to glue all mmap's together. s := analyze(nil, p0, nil) hi := -1 + lo := -1 for i := 0; i < maxPages; i++ { if s.pages[i] { hi = i + if lo == -1 { + lo = i + } } } if hi != -1 { @@ -290,7 +294,7 @@ func Minimize(p0 *Prog, callIndex0 int, pred func(*Prog, int) bool, crash bool) } } // Prepend uber-mmap. - mmap := createMmapCall(0, uintptr(hi)+1) + mmap := createMmapCall(uintptr(lo), uintptr(hi-lo)+1) p.Calls = append([]*Call{mmap}, p.Calls...) if callIndex != -1 { callIndex++ diff --git a/prog/mutation_test.go b/prog/mutation_test.go index 44a6eabc3..2f70e0a5d 100644 --- a/prog/mutation_test.go +++ b/prog/mutation_test.go @@ -255,15 +255,15 @@ func TestMinimize(t *testing.T) { // Glue several mmaps together. { "sched_yield()\n" + - "mmap(&(0x7f0000000000/0x1000)=nil, 0x1000, 0x3, 0x32, 0xffffffffffffffff, 0x0)\n" + - "mmap(&(0x7f0000001000/0x1000)=nil, 0x1000, 0x3, 0x32, 0xffffffffffffffff, 0x0)\n" + + "mmap(&(0x7f0000010000/0x1000)=nil, 0x1000, 0x3, 0x32, 0xffffffffffffffff, 0x0)\n" + + "mmap(&(0x7f0000011000/0x1000)=nil, 0x1000, 0x3, 0x32, 0xffffffffffffffff, 0x0)\n" + "getpid()\n" + - "mmap(&(0x7f0000005000/0x5000)=nil, 0x2000, 0x3, 0x32, 0xffffffffffffffff, 0x0)\n", + "mmap(&(0x7f0000015000/0x5000)=nil, 0x2000, 0x3, 0x32, 0xffffffffffffffff, 0x0)\n", 3, func(p *Prog, callIndex int) bool { return p.String() == "mmap-sched_yield-getpid" }, - "mmap(&(0x7f0000000000/0x7000)=nil, 0x7000, 0x0, 0x0, 0xffffffffffffffff, 0x0)\n" + + "mmap(&(0x7f0000010000/0x7000)=nil, 0x7000, 0x0, 0x0, 0xffffffffffffffff, 0x0)\n" + "sched_yield()\n" + "getpid()\n", 2, -- cgit mrf-deployment