- Add additional list entry checks that can be optionally enabled by defining EXTRA_KERNEL_LIST_ENTRY_CHECKS. These checks warn against attempts to remove items from an empty list, which can easily be an error (and is trivial to avoid where it's not).
- Enable these checks by default for ReactOS code
CORE-8419 #resolve

svn path=/trunk/; revision=66208
This commit is contained in:
Thomas Faber 2015-02-08 14:22:26 +00:00
parent 5a1de25f17
commit 3df35a13be
2 changed files with 32 additions and 0 deletions

View file

@ -9621,6 +9621,10 @@ RtlFailFast(
#define NO_KERNEL_LIST_ENTRY_CHECKS
#endif
#if !defined(EXTRA_KERNEL_LIST_ENTRY_CHECKS) && defined(__REACTOS__)
#define EXTRA_KERNEL_LIST_ENTRY_CHECKS
#endif
#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
#define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
@ -9693,6 +9697,10 @@ RemoveEntryList(
OldFlink = Entry->Flink;
OldBlink = Entry->Blink;
#if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
if (OldFlink == Entry || OldBlink == Entry)
FatalListEntryError(OldBlink, Entry, OldFlink);
#endif
if (OldFlink->Blink != Entry || OldBlink->Flink != Entry)
FatalListEntryError(OldBlink, Entry, OldFlink);
#endif
@ -9711,6 +9719,10 @@ RemoveHeadList(
#if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
RtlpCheckListEntry(ListHead);
#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
if (ListHead->Flink == ListHead || ListHead->Blink == ListHead)
FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink);
#endif
#endif
Entry = ListHead->Flink;
Flink = Entry->Flink;
@ -9733,6 +9745,10 @@ RemoveTailList(
#if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
RtlpCheckListEntry(ListHead);
#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
if (ListHead->Flink == ListHead || ListHead->Blink == ListHead)
FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink);
#endif
#endif
Entry = ListHead->Blink;
Blink = Entry->Blink;

View file

@ -35,6 +35,10 @@ RtlFailFast(
#define NO_KERNEL_LIST_ENTRY_CHECKS
#endif
#if !defined(EXTRA_KERNEL_LIST_ENTRY_CHECKS) && defined(__REACTOS__)
#define EXTRA_KERNEL_LIST_ENTRY_CHECKS
#endif
#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
#define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
@ -107,6 +111,10 @@ RemoveEntryList(
OldFlink = Entry->Flink;
OldBlink = Entry->Blink;
#if !defined(NO_KERNEL_LIST_ENTRY_CHECKS)
#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
if (OldFlink == Entry || OldBlink == Entry)
FatalListEntryError(OldBlink, Entry, OldFlink);
#endif
if (OldFlink->Blink != Entry || OldBlink->Flink != Entry)
FatalListEntryError(OldBlink, Entry, OldFlink);
#endif
@ -125,6 +133,10 @@ RemoveHeadList(
#if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
RtlpCheckListEntry(ListHead);
#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
if (ListHead->Flink == ListHead || ListHead->Blink == ListHead)
FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink);
#endif
#endif
Entry = ListHead->Flink;
Flink = Entry->Flink;
@ -147,6 +159,10 @@ RemoveTailList(
#if !defined(NO_KERNEL_LIST_ENTRY_CHECKS) && DBG
RtlpCheckListEntry(ListHead);
#ifdef EXTRA_KERNEL_LIST_ENTRY_CHECKS
if (ListHead->Flink == ListHead || ListHead->Blink == ListHead)
FatalListEntryError(ListHead->Blink, ListHead, ListHead->Flink);
#endif
#endif
Entry = ListHead->Blink;
Blink = Entry->Blink;