[NTOSKRNL]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 2 May 2014 14:38:36 +0000 (14:38 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 2 May 2014 14:38:36 +0000 (14:38 +0000)
If we cannot read the file at offset e_lfanew, it means that the value of e_lfanew is invalid.

svn path=/branches/ntvdm/; revision=63105

ntoskrnl/mm/section.c

index f138dd2..f88fbba 100644 (file)
@@ -284,7 +284,14 @@ l_ReadHeaderFromFile:
         nStatus = ReadFileCb(File, &lnOffset, sizeof(IMAGE_NT_HEADERS64), &pData, &pBuffer, &cbReadSize);
 
         if(!NT_SUCCESS(nStatus))
         nStatus = ReadFileCb(File, &lnOffset, sizeof(IMAGE_NT_HEADERS64), &pData, &pBuffer, &cbReadSize);
 
         if(!NT_SUCCESS(nStatus))
-            DIE(("ReadFile failed, status %08X\n", nStatus));
+        {
+            NTSTATUS ReturnedStatus = nStatus;
+
+            /* If it attempted to read past the end of the file, it means e_lfanew is invalid */
+            if (ReturnedStatus == STATUS_END_OF_FILE) nStatus = STATUS_INVALID_IMAGE_FORMAT;
+
+            DIE(("ReadFile failed, status %08X\n", ReturnedStatus));
+        }
 
         ASSERT(pData);
         ASSERT(pBuffer);
 
         ASSERT(pData);
         ASSERT(pBuffer);