From 0d0a82b1a271964cc829067a8240a6b17244ea25 Mon Sep 17 00:00:00 2001
From: Avi Kivity <avi.kivity@gmail.com>
Date: Mon, 7 Jan 2013 16:28:20 +0200
Subject: [PATCH] mmu: allow mapping a short file

When loading a small library (libverify.so) this happens.  Since it's legal,
allow it.
---
 mmu.cc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/mmu.cc b/mmu.cc
index 2ba5f6618..0a7f918de 100644
--- a/mmu.cc
+++ b/mmu.cc
@@ -131,8 +131,14 @@ namespace mmu {
     vma* map_file(void* addr, size_t size, unsigned perm,
                   file& f, f_offset offset)
     {
+        auto fsize = f.size();
+        if (offset >= fsize) {
+            return map_anon(addr, size, perm);
+        }
         vma* ret = map_anon_dontzero(addr, size, perm);
-        f.read(addr, offset, size);
+        auto rsize = std::min(offset + size, fsize) - offset;
+        f.read(addr, offset, rsize);
+        memset(addr + rsize, 0, size - rsize);
         return ret;
     }
 
-- 
GitLab