diff --git a/ntoskrnl/ex/handle.c b/ntoskrnl/ex/handle.c index b9732f3639df7..ab6905983f32c 100644 --- a/ntoskrnl/ex/handle.c +++ b/ntoskrnl/ex/handle.c @@ -68,12 +68,20 @@ ExpLookupHandleTableEntry(IN PHANDLE_TABLE HandleTable, /* Get the mid level pointer array */ PointerArray = PointerArray[Handle.HighIndex]; + /* TODO: maybe ASSERT? */ + if (PointerArray == NULL) + return NULL; + /* Fall through */ case 1: /* Get the handle array */ HandleArray = PointerArray[Handle.MidIndex]; + /* TODO: maybe ASSERT? */ + if (HandleArray == NULL) + return NULL; + /* Fall through */ case 0: @@ -708,6 +716,13 @@ ExpAllocateHandleTableEntry(IN PHANDLE_TABLE HandleTable, /* Lookup the entry for this handle */ Entry = ExpLookupHandleTableEntry(HandleTable, Handle); + /* TODO: maybe ASSERT? */ + if (Entry == NULL) + { + NewHandle->GenericHandleOverlay = NULL; + return NULL; + } + /* Get an available lock and acquire it */ i = ((OldValue & FREE_HANDLE_MASK) >> 2) % 4; KeEnterCriticalRegion(); diff --git a/ntoskrnl/ex/work.c b/ntoskrnl/ex/work.c index a5cfe71909dfe..04294ad7a3a2a 100644 --- a/ntoskrnl/ex/work.c +++ b/ntoskrnl/ex/work.c @@ -305,6 +305,9 @@ ExpCreateWorkerThread(WORK_QUEUE_TYPE WorkQueueType, (PVOID*)&Thread, NULL); + if (Thread == NULL) + return; + /* Set the Priority */ KeSetBasePriorityThread(&Thread->Tcb, Priority);