[NTOS:Mm] Fix a 64 bit issue in MmMapViewOfArm3Section (#778)
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 21 Aug 2018 09:25:22 +0000 (11:25 +0200)
committerGitHub <noreply@github.com>
Tue, 21 Aug 2018 09:25:22 +0000 (11:25 +0200)
Fixes a Clang-Cl warning
CORE-14306

ntoskrnl/mm/ARM3/section.c

index 689f6cd..f191225 100644 (file)
@@ -9,6 +9,7 @@
 /* INCLUDES *******************************************************************/
 
 #include <ntoskrnl.h>
+#include <ntintsafe.h>
 #define NDEBUG
 #include <debug.h>
 
@@ -2847,6 +2848,7 @@ MmMapViewOfArm3Section(IN PVOID SectionObject,
     PCONTROL_AREA ControlArea;
     ULONG ProtectionMask;
     NTSTATUS Status;
+    ULONG64 CalculatedViewSize;
     PAGED_CODE();
 
     /* Get the segment and control area */
@@ -2893,11 +2895,12 @@ MmMapViewOfArm3Section(IN PVOID SectionObject,
     if (!(*ViewSize))
     {
         /* Compute it for the caller */
-        *ViewSize = (SIZE_T)(Section->SizeOfSection.QuadPart - SectionOffset->QuadPart);
+        CalculatedViewSize = Section->SizeOfSection.QuadPart - 
+                             SectionOffset->QuadPart;
 
         /* Check if it's larger than 4GB or overflows into kernel-mode */
-        if ((*ViewSize > 0xFFFFFFFF) ||
-            (((ULONG_PTR)MM_HIGHEST_VAD_ADDRESS - (ULONG_PTR)*BaseAddress) < *ViewSize))
+        if (!NT_SUCCESS(RtlULongLongToSIZET(CalculatedViewSize, ViewSize)) ||
+            (((ULONG_PTR)MM_HIGHEST_VAD_ADDRESS - (ULONG_PTR)*BaseAddress) < CalculatedViewSize))
         {
             DPRINT1("Section view won't fit\n");
             return STATUS_INVALID_VIEW_SIZE;