[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:
Jérôme Gardou 2014-10-08 19:50:14 +00:00
parent e679240501
commit ebcacdec7a

View file

@ -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 */