fixed returning the reference to the token in SeCopyClientToken() and
probe pointer when neccessary
Modified: trunk/reactos/ntoskrnl/se/token.c
_____
Modified: trunk/reactos/ntoskrnl/se/token.c
--- trunk/reactos/ntoskrnl/se/token.c 2005-02-13 09:56:12 UTC (rev
13523)
+++ trunk/reactos/ntoskrnl/se/token.c 2005-02-13 13:03:44 UTC (rev
13524)
@@ -131,13 +131,32 @@
KPROCESSOR_MODE PreviousMode,
PTOKEN* NewAccessToken)
{
- NTSTATUS Status;
ULONG uLength;
ULONG i;
-
PVOID EndMem;
-
PTOKEN AccessToken;
+ NTSTATUS Status;
+
+ if(PreviousMode != KernelMode)
+ {
+ Status = STATUS_SUCCESS;
+ _SEH_TRY
+ {
+ ProbeForWrite(NewAccessToken,
+ sizeof(TOKEN),
+ sizeof(ULONG));
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
+
+ if(!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
+ }
Status = ObCreateObject(PreviousMode,
SepTokenObjectType,
@@ -244,8 +263,17 @@
if ( NT_SUCCESS(Status) )
{
- *NewAccessToken = AccessToken;
- return(STATUS_SUCCESS);
+ _SEH_TRY
+ {
+ *NewAccessToken = AccessToken;
+ Status = STATUS_SUCCESS;
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
+ return Status;
}
ObDereferenceObject(AccessToken);
@@ -320,7 +348,7 @@
TokenImpersonation,
Level,
PreviousMode,
- (PTOKEN*)&NewToken);
+ (PTOKEN*)NewToken);
return(Status);
}
Show replies by date