From: Jeffrey Altman Date: Tue, 26 Mar 2013 12:59:14 +0000 (-0400) Subject: Windows: AFSDeleteDirEntry deleted flag shuffle X-Git-Tag: upstream/1.8.0_pre1^2~1247 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=f915b4ef15bf815d9405284130e031bd558ce8f1;p=packages%2Fo%2Fopenafs.git Windows: AFSDeleteDirEntry deleted flag shuffle Move the assignment of the deleted flag earlier in AFSDeleteDirEntry() to avoid potential invalid memory access. Change-Id: I6d0e1272cc9f2bb491ad291a65b94c53ced9a354 Reviewed-on: http://gerrit.openafs.org/9672 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp index 376ca2df3..8930dd168 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp @@ -2797,6 +2797,13 @@ AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo, AFSExFreePoolWithTag( DirEntry->NameInformation.TargetName.Buffer, 0); } + if( BooleanFlagOn( DirEntry->Flags, AFS_DIR_ENTRY_DELETED) && + DirEntry->ObjectInformation->Links == 0) + { + + SetFlag( DirEntry->ObjectInformation->Flags, AFS_OBJECT_FLAGS_DELETED); + } + // // Dereference the object for this dir entry // @@ -2810,13 +2817,6 @@ AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo, DirEntry->ObjectInformation, lCount)); - if( BooleanFlagOn( DirEntry->Flags, AFS_DIR_ENTRY_DELETED) && - DirEntry->ObjectInformation->Links == 0) - { - - SetFlag( DirEntry->ObjectInformation->Flags, AFS_OBJECT_FLAGS_DELETED); - } - ExDeleteResourceLite( &DirEntry->NonPaged->Lock); AFSExFreePoolWithTag( DirEntry->NonPaged, AFS_DIR_ENTRY_NP_TAG);