Fix zero-allocation.
authorMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Tue, 24 Aug 2010 13:19:03 +0000 (15:19 +0200)
committerMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Tue, 24 Aug 2010 13:19:03 +0000 (15:19 +0200)
loader/ChangeLog
loader/ntdll_virtual.c

index b8a5e40..e0fa9e7 100644 (file)
@@ -1,4 +1,4 @@
-2010-08-13  Marcus Brinkmann  <marcus@g10code.de>
+2010-08-24  Marcus Brinkmann  <marcus@g10code.de>
 
        * Initial release.
 
index 20fa87b..c76193a 100644 (file)
@@ -105,6 +105,7 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
   int prot = get_prot_flags (vprot);
   struct file_view *view;
   void *ptr;
+  void *new_ptr;
 
   view = malloc (sizeof (struct file_view));
   if (!view)
@@ -118,6 +119,13 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
       free (view);
       return GetLastError();
     }
+  /* We have to zero map the whole thing.  */
+  new_ptr = VirtualAlloc (ptr, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+  if (new_ptr != ptr)
+    {
+      free (view);
+      return GetLastError();
+    }
   view->base = ptr;
   view->size = size;
   view->protect = vprot;
@@ -159,9 +167,15 @@ static NTSTATUS map_file_into_view( struct file_view *view, HANDLE fhandle, size
     }
 #endif
 
+#if 0
+  /* Already done by map_view.  */
   /* Reserve the memory with an anonymous mmap */
   ptr = VirtualAlloc ((char *)view->base + start, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
   if (ptr == (void *)-1) return GetLastError();
+#else
+  ptr = (char *)view->base + start;
+#endif
+
   /* Now read in the file */
   pread( fhandle, ptr, size, offset );
   //  if (prot != (PROT_READ|PROT_WRITE)) mprotect( ptr, size, prot );  /* Set the right protection */