Merge from HEAD: r14209
Minor correction to NtAdjustPrivilegesToken to keep it from returning
total junk.
Modified: branches/ros-branch-0_2_6/reactos/ntoskrnl/mm/marea.c
Modified: branches/ros-branch-0_2_6/reactos/ntoskrnl/se/token.c
_____
Modified: branches/ros-branch-0_2_6/reactos/ntoskrnl/mm/marea.c
--- branches/ros-branch-0_2_6/reactos/ntoskrnl/mm/marea.c
2005-03-23 17:12:03 UTC (rev 14282)
+++ branches/ros-branch-0_2_6/reactos/ntoskrnl/mm/marea.c
2005-03-23 17:12:58 UTC (rev 14283)
@@ -491,7 +491,8 @@
/* Check if there is enough space after the last memory area. */
AlignedAddress = MM_ROUND_UP(PreviousNode->EndingAddress,
Granularity);
- if ((ULONG_PTR)HighestAddress - (ULONG_PTR)AlignedAddress >= Length)
+ if ((ULONG_PTR)HighestAddress > (ULONG_PTR)AlignedAddress &&
+ (ULONG_PTR)HighestAddress - (ULONG_PTR)AlignedAddress >= Length)
{
DPRINT("MmFindGapBottomUp: %p\n", AlignedAddress);
return AlignedAddress;
_____
Modified: branches/ros-branch-0_2_6/reactos/ntoskrnl/se/token.c
--- branches/ros-branch-0_2_6/reactos/ntoskrnl/se/token.c
2005-03-23 17:12:03 UTC (rev 14282)
+++ branches/ros-branch-0_2_6/reactos/ntoskrnl/se/token.c
2005-03-23 17:12:58 UTC (rev 14283)
@@ -1632,7 +1632,7 @@
{
// PLUID_AND_ATTRIBUTES Privileges;
KPROCESSOR_MODE PreviousMode;
-// ULONG PrivilegeCount;
+ ULONG PrivilegeCount;
PTOKEN Token;
// ULONG Length;
ULONG i;
@@ -1690,6 +1690,12 @@
&c);
#endif
+ PrivilegeCount = (BufferLength - FIELD_OFFSET(TOKEN_PRIVILEGES,
Privileges)) /
+ sizeof(LUID_AND_ATTRIBUTES);
+
+ if (PreviousState != NULL)
+ PreviousState->PrivilegeCount = 0;
+
k = 0;
if (DisableAllPrivileges == TRUE)
{
@@ -1700,11 +1706,22 @@
DPRINT ("Attributes differ\n");
/* Save current privilege */
- if (PreviousState != NULL && k <
PreviousState->PrivilegeCount)
+ if (PreviousState != NULL)
{
- PreviousState->Privileges[k].Luid =
Token->Privileges[i].Luid;
- PreviousState->Privileges[k].Attributes =
Token->Privileges[i].Attributes;
- k++;
+ if (k < PrivilegeCount)
+ {
+ PreviousState->PrivilegeCount++;
+ PreviousState->Privileges[k].Luid =
Token->Privileges[i].Luid;
+ PreviousState->Privileges[k].Attributes =
Token->Privileges[i].Attributes;
+ }
+ else
+ {
+ /* FIXME: Should revert all the changes,
calculate how
+ * much space would be needed, set ResultLength
+ * accordingly and fail.
+ */
+ }
+ k++;
}
/* Update current privlege */
@@ -1734,11 +1751,22 @@
NewState->Privileges[j].Attributes);
/* Save current privilege */
- if (PreviousState != NULL && k <
PreviousState->PrivilegeCount)
+ if (PreviousState != NULL)
{
- PreviousState->Privileges[k].Luid =
Token->Privileges[i].Luid;
- PreviousState->Privileges[k].Attributes =
Token->Privileges[i].Attributes;
- k++;
+ if (k < PrivilegeCount)
+ {
+ PreviousState->PrivilegeCount++;
+ PreviousState->Privileges[k].Luid =
Token->Privileges[i].Luid;
+ PreviousState->Privileges[k].Attributes =
Token->Privileges[i].Attributes;
+ }
+ else
+ {
+ /* FIXME: Should revert all the changes,
calculate how
+ * much space would be needed, set
ResultLength
+ * accordingly and fail.
+ */
+ }
+ k++;
}
/* Update current privlege */