Fixed a few length calculation in NtEnumerateValueKey, which has
resulted in a overflow, if the given buffer was too small.
Modified: trunk/reactos/ntoskrnl/cm/ntfunc.c
_____
Modified: trunk/reactos/ntoskrnl/cm/ntfunc.c
--- trunk/reactos/ntoskrnl/cm/ntfunc.c 2005-11-14 17:33:38 UTC (rev
19226)
+++ trunk/reactos/ntoskrnl/cm/ntfunc.c 2005-11-14 17:46:00 UTC (rev
19227)
@@ -1135,18 +1135,16 @@
ROUND_UP(ValueFullInformation->DataOffset,
sizeof(PVOID));
ValueFullInformation->DataLength = ValueCell->DataSize &
REG_DATA_SIZE_MASK;
- if (Length - FIELD_OFFSET(KEY_VALUE_FULL_INFORMATION,
Name[0]) <
- NameSize)
+ if (Length < ValueFullInformation->DataOffset)
{
NameSize = Length -
FIELD_OFFSET(KEY_VALUE_FULL_INFORMATION, Name[0]);
DataSize = 0;
Status = STATUS_BUFFER_OVERFLOW;
CHECKPOINT;
}
- else if (ROUND_UP(Length -
FIELD_OFFSET(KEY_VALUE_FULL_INFORMATION,
- Name[0]) - NameSize, sizeof(PVOID)) < DataSize)
+ else if (Length - ValueFullInformation->DataOffset <
DataSize)
{
- DataSize = ROUND_UP(Length -
FIELD_OFFSET(KEY_VALUE_FULL_INFORMATION, Name[0]) - NameSize,
sizeof(PVOID));
+ DataSize = Length - ValueFullInformation->DataOffset;
Status = STATUS_BUFFER_OVERFLOW;
CHECKPOINT;
}