diff --git a/3rdparty/phnt/include/ntrtl.h b/3rdparty/phnt/include/ntrtl.h index 79fc5620..45feecec 100644 --- a/3rdparty/phnt/include/ntrtl.h +++ b/3rdparty/phnt/include/ntrtl.h @@ -30,14 +30,17 @@ FORCEINLINE BOOLEAN RemoveEntryList( _In_ PLIST_ENTRY Entry ) { - PLIST_ENTRY Blink; - PLIST_ENTRY Flink; + if (!Entry) return FALSE; + + PLIST_ENTRY Blink = Entry->Blink; + PLIST_ENTRY Flink = Entry->Flink; + + if (!Blink || !Flink) return FALSE; - Flink = Entry->Flink; - Blink = Entry->Blink; Blink->Flink = Flink; Flink->Blink = Blink; - + Entry->Flink = NULL; + Entry->Blink = NULL; return Flink == Blink; } diff --git a/MemoryModule/LdrEntry.cpp b/MemoryModule/LdrEntry.cpp index a0e8fbfe..8d3d10a9 100644 --- a/MemoryModule/LdrEntry.cpp +++ b/MemoryModule/LdrEntry.cpp @@ -272,9 +272,12 @@ NTSTATUS NTAPI RtlGetReferenceCount( VOID NTAPI RtlInsertMemoryTableEntry(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry) { PPEB_LDR_DATA PebData = NtCurrentPeb()->Ldr; PLIST_ENTRY LdrpHashTable = MmpGlobalDataPtr->MmpLdrEntry->LdrpHashTable; - ULONG i; + + /* Validate hash table */ + if (!MmpGlobalDataPtr->MmpLdrEntry->LdrpHashTable) return; /* Insert into hash table */ + ULONG i; i = LdrHashEntry(LdrEntry->BaseDllName); InsertTailList(&LdrpHashTable[i], &LdrEntry->HashLinks);