mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:03:02 +00:00
[NTOS/SE]
- Correctly reference/dereference token object when the set token is already in use. svn path=/trunk/; revision=64619
This commit is contained in:
parent
e679240501
commit
ebcacdec7a
1 changed files with 12 additions and 3 deletions
|
@ -243,19 +243,28 @@ SeExchangePrimaryToken(PEPROCESS Process,
|
||||||
if (OldToken == NewToken)
|
if (OldToken == NewToken)
|
||||||
{
|
{
|
||||||
/* So it's a nop. */
|
/* So it's a nop. */
|
||||||
PsDereferencePrimaryToken(OldToken);
|
*OldTokenP = OldToken;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = SepCompareTokens(OldToken, NewToken, &IsEqual);
|
Status = SepCompareTokens(OldToken, NewToken, &IsEqual);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
*OldTokenP = NULL;
|
||||||
PsDereferencePrimaryToken(OldToken);
|
PsDereferencePrimaryToken(OldToken);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IsEqual)
|
||||||
|
{
|
||||||
|
*OldTokenP = NULL;
|
||||||
PsDereferencePrimaryToken(OldToken);
|
PsDereferencePrimaryToken(OldToken);
|
||||||
return IsEqual ? STATUS_SUCCESS : STATUS_TOKEN_ALREADY_IN_USE;
|
return STATUS_TOKEN_ALREADY_IN_USE;
|
||||||
|
}
|
||||||
|
/* Silently return STATUS_SUCCESS but do not set the new token,
|
||||||
|
* as it's already in use elsewhere. */
|
||||||
|
*OldTokenP = OldToken;
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark new token in use */
|
/* Mark new token in use */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue