https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f43a7b81a7cbab29ffe4e…
commit f43a7b81a7cbab29ffe4ed31cafa6550f353440a
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Tue Aug 21 11:25:22 2018 +0200
Commit: GitHub <noreply(a)github.com>
CommitDate: Tue Aug 21 11:25:22 2018 +0200
[NTOS:Mm] Fix a 64 bit issue in MmMapViewOfArm3Section (#778)
Fixes a Clang-Cl warning
CORE-14306
---
ntoskrnl/mm/ARM3/section.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/ntoskrnl/mm/ARM3/section.c b/ntoskrnl/mm/ARM3/section.c
index 689f6cd86f..f1912253d9 100644
--- a/ntoskrnl/mm/ARM3/section.c
+++ b/ntoskrnl/mm/ARM3/section.c
@@ -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;