linux-user: mmap: add check if requested memory area fits target address space
authoraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 8 Dec 2008 18:12:33 +0000 (18:12 +0000)
committeraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 8 Dec 2008 18:12:33 +0000 (18:12 +0000)
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Acked-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5958 c046a42c-6fe2-441c-8c8c-71466251a162

linux-user/mmap.c

index d5f22b82b76f73481574ad668e55718c1af0bbfe..2d0c684f4c3fb86e5536c7a28501cc466433efa4 100644 (file)
@@ -382,6 +382,16 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
         end = start + len;
         real_end = HOST_PAGE_ALIGN(end);
 
+       /*
+        * Test if requested memory area fits target address space
+        * It can fail only on 64-bit host with 32-bit target.
+        * On any other target/host host mmap() handles this error correctly.
+        */
+        if ((unsigned long)start + len - 1 > (abi_ulong) -1) {
+            errno = EINVAL;
+            goto fail;
+        }
+
         for(addr = real_start; addr < real_end; addr += TARGET_PAGE_SIZE) {
             flg = page_get_flags(addr);
             if (flg & PAGE_RESERVED) {