From 520da249a12b284dc67520e27d1cc55a464ecaa6 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sat, 2 Dec 2017 10:26:09 +1100 Subject: [PATCH] Test that mmap size doesn't exceed system memory address width Should fix http://paste.ubuntu.com/26074620/ --- storage/mmap.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/storage/mmap.go b/storage/mmap.go index 0dc512d4..fbd3f54d 100644 --- a/storage/mmap.go +++ b/storage/mmap.go @@ -1,6 +1,7 @@ package storage import ( + "errors" "fmt" "io" "os" @@ -142,15 +143,18 @@ func mmapFile(name string, size int64) (ret mmap.MMap, err error) { // Can't mmap() regions with length 0. return } - ret, err = mmap.MapRegion(file, - int(size), // Probably not great on <64 bit systems. - mmap.RDWR, 0, 0) + intLen := int(size) + if int64(intLen) != size { + err = errors.New("size too large for system") + return + } + ret, err = mmap.MapRegion(file, intLen, mmap.RDWR, 0, 0) if err != nil { - err = fmt.Errorf("mapping file %q, length %d: %s", file.Name(), size, err) + err = fmt.Errorf("error mapping region: %s", err) return } if int64(len(ret)) != size { - panic("mmap has wrong length") + panic(len(ret)) } return } -- 2.48.1