[NTOSKRNL]

- Protect against invalid ThreadContext pointer in PspCreateThread. Spotted by Aleksander Andrejevic.
CORE-7252
- Fix MSVC warning in HdlspDispatch

svn path=/trunk/; revision=60401
This commit is contained in:
Thomas Faber 2013-09-28 08:37:47 +00:00
parent a86e82a7d4
commit 5c5939994a
2 changed files with 23 additions and 12 deletions

View file

@ -417,7 +417,7 @@ HdlspDispatch(IN HEADLESS_CMD Command,
HeadlessInfo = OutputBuffer; HeadlessInfo = OutputBuffer;
HeadlessInfo->PortType = HeadlessSerialPort; HeadlessInfo->PortType = HeadlessSerialPort;
HeadlessInfo->Serial.TerminalAttached = TRUE; HeadlessInfo->Serial.TerminalAttached = TRUE;
HeadlessInfo->Serial.UsedBiosSettings = HeadlessGlobals->UsedBiosSettings; HeadlessInfo->Serial.UsedBiosSettings = HeadlessGlobals->UsedBiosSettings != 0;
HeadlessInfo->Serial.TerminalBaudRate = HeadlessGlobals->TerminalBaudRate; HeadlessInfo->Serial.TerminalBaudRate = HeadlessGlobals->TerminalBaudRate;
HeadlessInfo->Serial.TerminalType = HeadlessGlobals->TerminalType; HeadlessInfo->Serial.TerminalType = HeadlessGlobals->TerminalType;

View file

@ -317,11 +317,21 @@ PspCreateThread(OUT PHANDLE ThreadHandle,
return Status; return Status;
} }
/* Set the Start Addresses */ /* Set the Start Addresses from the untrusted ThreadContext */
_SEH2_TRY
{
Thread->StartAddress = (PVOID)KeGetContextPc(ThreadContext); Thread->StartAddress = (PVOID)KeGetContextPc(ThreadContext);
Thread->Win32StartAddress = (PVOID)KeGetContextReturnRegister(ThreadContext); Thread->Win32StartAddress = (PVOID)KeGetContextReturnRegister(ThreadContext);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = _SEH2_GetExceptionCode();
}
_SEH2_END;
/* Let the kernel intialize the Thread */ /* Let the kernel intialize the Thread */
if (NT_SUCCESS(Status))
{
Status = KeInitThread(&Thread->Tcb, Status = KeInitThread(&Thread->Tcb,
NULL, NULL,
PspUserThreadStartup, PspUserThreadStartup,
@ -331,6 +341,7 @@ PspCreateThread(OUT PHANDLE ThreadHandle,
TebBase, TebBase,
&Process->Pcb); &Process->Pcb);
} }
}
else else
{ {
/* System Thread */ /* System Thread */