- Fix two major problems in CmpCleanUpKcbCacheWithLock:

* Accessing (reading and writing - corruption!) freed paged pool memory.
 * Lacking a dereference of a parent key.
- Fix a typo in the comment ("reference" -> "dereference").

svn path=/trunk/; revision=35836
This commit is contained in:
Aleksey Bragin
2008-08-31 16:24:29 +00:00
parent a04c3e8d7f
commit d658f95e0c
+5 -5
View File
@@ -483,7 +483,7 @@ CmpCleanUpKcbCacheWithLock(IN PCM_KEY_CONTROL_BLOCK Kcb,
/* Cleanup the value cache */
CmpCleanUpKcbValueCache(Kcb);
/* Reference the NCB */
/* Dereference the NCB */
CmpDereferenceNameControlBlockWithLock(Kcb->NameBlock);
/* Check if we have an index hint block and free it */
@@ -492,10 +492,10 @@ CmpCleanUpKcbCacheWithLock(IN PCM_KEY_CONTROL_BLOCK Kcb,
/* Check if we were already deleted */
Parent = Kcb->ParentKcb;
if (!Kcb->Delete) CmpRemoveKeyControlBlock(Kcb);
/* Set invalid KCB signature */
Kcb->Signature = CM_KCB_INVALID_SIGNATURE;
/* Free the KCB as well */
CmpFreeKeyControlBlock(Kcb);
@@ -504,8 +504,8 @@ CmpCleanUpKcbCacheWithLock(IN PCM_KEY_CONTROL_BLOCK Kcb,
{
/* Dereference the parent */
LockHeldExclusively ?
CmpDereferenceKeyControlBlockWithLock(Kcb,LockHeldExclusively) :
CmpDelayDerefKeyControlBlock(Kcb);
CmpDereferenceKeyControlBlockWithLock(Parent,LockHeldExclusively) :
CmpDelayDerefKeyControlBlock(Parent);
}
}