Windows: AFSLibExFreePool*() macros
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 6 May 2013 19:12:54 +0000 (15:12 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Wed, 8 May 2013 01:48:03 +0000 (18:48 -0700)
Introduce the AFSLibExFreePool() and AFSLibExFreePoolWithTag() macros
which simply call ExFreePool() and ExFreePoolWithTag().

The prefix AFSLib indicates that memory allocated by
AFSLibExAllocatePoolWithTag() must be freed before unloading.
AFSExFreePool*() cannot be used because that is a pointer to a
function provided by AFSRedir.sys which may not be assigned when
memory must be freed.

The only time that ExFreePool() should be used is if the memory was
allocated by a system function.

Change-Id: If56b762d2b6d857dbe415171401d64ca10a1e9ea
Reviewed-on: http://gerrit.openafs.org/9853
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>

src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp
src/WINNT/afsrdr/kernel/lib/AFSDirControl.cpp
src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp
src/WINNT/afsrdr/kernel/lib/AFSInit.cpp
src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp
src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h

index c29dbc5..3df5939 100644 (file)
@@ -3231,7 +3231,8 @@ try_exit:
         if( pIoRequest != NULL)
         {
 
-            AFSExFreePoolWithTag( pIoRequest, AFS_GENERIC_MEMORY_4_TAG);
+           AFSLibExFreePoolWithTag( pIoRequest,
+                                    AFS_GENERIC_MEMORY_4_TAG);
         }
     }
 
index b01c711..27f1690 100644 (file)
@@ -2298,7 +2298,9 @@ try_exit:
 
         if( pDirEnum != NULL)
         {
-            ExFreePool( pDirEnum);
+
+           AFSLibExFreePoolWithTag( pDirEnum,
+                                    AFS_GENERIC_MEMORY_3_TAG);
         }
     }
 
index 502ca20..c3e5cc7 100644 (file)
@@ -723,7 +723,8 @@ AFSInitializeGlobalDirectoryEntries()
         if( pNonPagedDirEntry == NULL)
         {
 
-            ExFreePool( pDirNode);
+           AFSLibExFreePoolWithTag( pDirNode,
+                                    AFS_DIR_ENTRY_TAG);
 
             lCount = AFSObjectInfoDecrement( pObjectInfoCB,
                                              AFS_OBJECT_REFERENCE_GLOBAL);
@@ -862,7 +863,8 @@ AFSInitializeGlobalDirectoryEntries()
         if( pNonPagedDirEntry == NULL)
         {
 
-            ExFreePool( pDirNode);
+           AFSLibExFreePoolWithTag( pDirNode,
+                                    AFS_DIR_ENTRY_TAG);
 
             lCount = AFSObjectInfoDecrement( pObjectInfoCB,
                                              AFS_OBJECT_REFERENCE_GLOBAL);
@@ -951,9 +953,11 @@ try_exit:
 
                 ExDeleteResourceLite( &AFSGlobalDotDirEntry->NonPaged->Lock);
 
-                ExFreePool( AFSGlobalDotDirEntry->NonPaged);
+               AFSLibExFreePoolWithTag( AFSGlobalDotDirEntry->NonPaged,
+                                        AFS_DIR_ENTRY_NP_TAG);
 
-                ExFreePool( AFSGlobalDotDirEntry);
+               AFSLibExFreePoolWithTag( AFSGlobalDotDirEntry,
+                                        AFS_DIR_ENTRY_TAG);
 
                 AFSGlobalDotDirEntry = NULL;
             }
@@ -978,9 +982,11 @@ try_exit:
 
                 ExDeleteResourceLite( &AFSGlobalDotDotDirEntry->NonPaged->Lock);
 
-                ExFreePool( AFSGlobalDotDotDirEntry->NonPaged);
+               AFSLibExFreePoolWithTag( AFSGlobalDotDotDirEntry->NonPaged,
+                                        AFS_DIR_ENTRY_NP_TAG);
 
-                ExFreePool( AFSGlobalDotDotDirEntry);
+               AFSLibExFreePoolWithTag( AFSGlobalDotDotDirEntry,
+                                        AFS_DIR_ENTRY_TAG);
 
                 AFSGlobalDotDotDirEntry = NULL;
             }
@@ -4548,7 +4554,8 @@ AFSInitializeSpecialShareNameList()
         if( pNonPagedDirEntry == NULL)
         {
 
-            ExFreePool( pDirNode);
+           AFSLibExFreePoolWithTag( pDirNode,
+                                    AFS_DIR_ENTRY_TAG);
 
             lCount = AFSObjectInfoDecrement( pObjectInfoCB,
                                              AFS_OBJECT_REFERENCE_GLOBAL);
@@ -4667,7 +4674,8 @@ AFSInitializeSpecialShareNameList()
         if( pNonPagedDirEntry == NULL)
         {
 
-            ExFreePool( pDirNode);
+           AFSLibExFreePoolWithTag( pDirNode,
+                                    AFS_DIR_ENTRY_TAG);
 
             lCount = AFSObjectInfoDecrement( pObjectInfoCB,
                                              AFS_OBJECT_REFERENCE_GLOBAL);
@@ -4754,9 +4762,11 @@ try_exit:
 
                     ExDeleteResourceLite( &pDirNode->NonPaged->Lock);
 
-                    ExFreePool( pDirNode->NonPaged);
+                   AFSLibExFreePoolWithTag( pDirNode->NonPaged,
+                                            AFS_DIR_ENTRY_NP_TAG);
 
-                    ExFreePool( pDirNode);
+                   AFSLibExFreePoolWithTag( pDirNode,
+                                            AFS_DIR_ENTRY_TAG);
 
                     pDirNode = pLastDirNode;
                 }
@@ -5057,7 +5067,8 @@ AFSEnumerateGlobalRoot( IN GUID *AuthGroup)
             pDirGlobalDirNode = (AFSDirectoryCB *)pDirGlobalDirNode->ListEntry.fLink;
         }
 
-        AFSExFreePoolWithTag( uniFullName.Buffer, 0);
+       AFSLibExFreePoolWithTag( uniFullName.Buffer,
+                                AFS_GENERIC_MEMORY_12_TAG);
 
 try_exit:
 
@@ -7836,9 +7847,11 @@ AFSCloseLibrary()
 
             ExDeleteResourceLite( &AFSGlobalDotDirEntry->NonPaged->Lock);
 
-            ExFreePool( AFSGlobalDotDirEntry->NonPaged);
+           AFSLibExFreePoolWithTag( AFSGlobalDotDirEntry->NonPaged,
+                                    AFS_DIR_ENTRY_NP_TAG);
 
-            ExFreePool( AFSGlobalDotDirEntry);
+           AFSLibExFreePoolWithTag( AFSGlobalDotDirEntry,
+                                    AFS_DIR_ENTRY_TAG);
 
             AFSGlobalDotDirEntry = NULL;
         }
@@ -7863,9 +7876,11 @@ AFSCloseLibrary()
 
             ExDeleteResourceLite( &AFSGlobalDotDotDirEntry->NonPaged->Lock);
 
-            ExFreePool( AFSGlobalDotDotDirEntry->NonPaged);
+           AFSLibExFreePoolWithTag( AFSGlobalDotDotDirEntry->NonPaged,
+                                 AFS_DIR_ENTRY_NP_TAG);
 
-            ExFreePool( AFSGlobalDotDotDirEntry);
+           AFSLibExFreePoolWithTag( AFSGlobalDotDotDirEntry,
+                                 AFS_DIR_ENTRY_TAG);
 
             AFSGlobalDotDotDirEntry = NULL;
         }
@@ -7897,9 +7912,11 @@ AFSCloseLibrary()
 
                 ExDeleteResourceLite( &pDirNode->NonPaged->Lock);
 
-                ExFreePool( pDirNode->NonPaged);
+               AFSLibExFreePoolWithTag( pDirNode->NonPaged,
+                                        AFS_DIR_ENTRY_NP_TAG);
 
-                ExFreePool( pDirNode);
+               AFSLibExFreePoolWithTag( pDirNode,
+                                        AFS_DIR_ENTRY_TAG);
 
                 pDirNode = pLastDirNode;
             }
@@ -8808,28 +8825,38 @@ try_exit:
 
             if( pRelativeSecurityDescr != NULL)
             {
-                ExFreePool( pRelativeSecurityDescr);
+
+               AFSLibExFreePoolWithTag( pRelativeSecurityDescr,
+                                        AFS_GENERIC_MEMORY_27_TAG);
             }
         }
 
         if( pSecurityDescr != NULL)
         {
-            ExFreePool( pSecurityDescr);
+
+           AFSLibExFreePoolWithTag( pSecurityDescr,
+                                    AFS_GENERIC_MEMORY_27_TAG);
         }
 
         if( pSACL != NULL)
         {
-            ExFreePool( pSACL);
+
+           AFSLibExFreePoolWithTag( pSACL,
+                                    AFS_GENERIC_MEMORY_29_TAG);
         }
 
         if( pACE != NULL)
         {
-            ExFreePool( pACE);
+
+           AFSLibExFreePoolWithTag( pACE,
+                                    AFS_GENERIC_MEMORY_29_TAG);
         }
 
         if( pWorldSID != NULL)
         {
-            ExFreePool( pWorldSID);
+
+           AFSLibExFreePoolWithTag( pWorldSID,
+                                    AFS_GENERIC_MEMORY_29_TAG);
         }
     }
 
index 34fc994..240afa1 100644 (file)
@@ -261,7 +261,8 @@ try_exit:
             if( AFSRegistryPath.Buffer != NULL)
             {
 
-                ExFreePool( AFSRegistryPath.Buffer);
+               AFSLibExFreePoolWithTag( AFSRegistryPath.Buffer,
+                                        AFS_GENERIC_MEMORY_13_TAG);
             }
 
             if( AFSLibraryDeviceObject != NULL)
@@ -309,14 +310,17 @@ AFSUnload( IN PDRIVER_OBJECT DriverObject)
     if( AFSRegistryPath.Buffer != NULL)
     {
 
-        ExFreePool( AFSRegistryPath.Buffer);
+       AFSLibExFreePoolWithTag( AFSRegistryPath.Buffer,
+                                AFS_GENERIC_MEMORY_13_TAG);
     }
 
     AFSCloseLibrary();
 
     if( AFSDefaultSD != NULL)
     {
-        ExFreePool( AFSDefaultSD);
+
+       AFSLibExFreePoolWithTag( AFSDefaultSD,
+                                AFS_GENERIC_MEMORY_27_TAG);
     }
 
     if( AFSLibraryDeviceObject != NULL)
index 228cbc6..31dc7de 100644 (file)
@@ -103,7 +103,8 @@ AFSInitializeWorkerPool()
                               "AFSInitializeWorkerPool Failed to initialize worker thread Status %08lX\n",
                               ntStatus));
 
-                ExFreePool( pCurrentWorker);
+               AFSLibExFreePoolWithTag( pCurrentWorker,
+                                        AFS_WORKER_CB_TAG);
 
                 break;
             }
@@ -174,7 +175,8 @@ AFSInitializeWorkerPool()
                               "AFSInitializeWorkerPool Failed to initialize IO worker thread Status %08lX\n",
                               ntStatus));
 
-                ExFreePool( pCurrentWorker);
+               AFSLibExFreePoolWithTag( pCurrentWorker,
+                                        AFS_WORKER_CB_TAG);
 
                 break;
             }
@@ -281,7 +283,8 @@ AFSRemoveWorkerPool()
 
         pNextWorker = pCurrentWorker->fLink;
 
-        ExFreePool( pCurrentWorker);
+       AFSLibExFreePoolWithTag( pCurrentWorker,
+                                AFS_WORKER_CB_TAG);
 
         pCurrentWorker = pNextWorker;
 
@@ -334,7 +337,8 @@ AFSRemoveWorkerPool()
 
         pNextWorker = pCurrentWorker->fLink;
 
-        ExFreePool( pCurrentWorker);
+       AFSLibExFreePoolWithTag( pCurrentWorker,
+                                AFS_WORKER_CB_TAG);
 
         pCurrentWorker = pNextWorker;
 
@@ -773,7 +777,8 @@ AFSWorkerThread( IN PVOID Context)
                 if( freeWorkItem)
                 {
 
-                    ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+                   AFSExFreePoolWithTag( pWorkItem,
+                                         AFS_WORK_ITEM_TAG);
                 }
 
                 ntStatus = STATUS_SUCCESS;
@@ -922,7 +927,8 @@ AFSIOWorkerThread( IN PVOID Context)
                 if( freeWorkItem)
                 {
 
-                    ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+                   AFSLibExFreePoolWithTag( pWorkItem,
+                                            AFS_WORK_ITEM_TAG);
                 }
 
                 ntStatus = STATUS_SUCCESS;
@@ -1038,14 +1044,16 @@ AFSExamineObjectInfo( IN AFSObjectInfoCB * pCurrentObject,
 
                         ExDeleteResourceLite( &pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->NonPaged->Lock);
 
-                        AFSExFreePoolWithTag( pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->NonPaged, AFS_DIR_ENTRY_NP_TAG);
+                       AFSExFreePoolWithTag( pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->NonPaged,
+                                             AFS_DIR_ENTRY_NP_TAG);
 
                         AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
                                       AFS_TRACE_LEVEL_VERBOSE,
                                       "AFSExamineObjectInfo (pioctl) AFS_DIR_ENTRY_TAG deallocating %p\n",
                                       pCurrentObject->Specific.Directory.PIOCtlDirectoryCB));
 
-                        AFSExFreePoolWithTag( pCurrentObject->Specific.Directory.PIOCtlDirectoryCB, AFS_DIR_ENTRY_TAG);
+                       AFSExFreePoolWithTag( pCurrentObject->Specific.Directory.PIOCtlDirectoryCB,
+                                             AFS_DIR_ENTRY_TAG);
 
                         pCurrentObject->Specific.Directory.PIOCtlDirectoryCB = NULL;
                     }
@@ -2393,7 +2401,8 @@ try_exit:
 
                 lCount = InterlockedDecrement( &Fcb->OpenReferenceCount);
 
-                ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+               AFSExFreePoolWithTag( pWorkItem,
+                                     AFS_WORK_ITEM_TAG);
             }
 
             AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -2465,7 +2474,8 @@ try_exit:
             if( pWorkItem != NULL)
             {
 
-                ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+               AFSExFreePoolWithTag( pWorkItem,
+                                     AFS_WORK_ITEM_TAG);
             }
 
             AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -2576,7 +2586,8 @@ try_exit:
             if( pWorkItem != NULL)
             {
 
-                ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+               AFSExFreePoolWithTag( pWorkItem,
+                                     AFS_WORK_ITEM_TAG);
             }
         }
     }
@@ -2647,7 +2658,9 @@ try_exit:
 
             if( pWorkItem != NULL)
             {
-                ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+
+               AFSExFreePoolWithTag( pWorkItem,
+                                     AFS_WORK_ITEM_TAG);
             }
 
             AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -2764,7 +2777,8 @@ try_exit:
         if( pWorkItem != NULL)
         {
 
-            ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+           AFSExFreePoolWithTag( pWorkItem,
+                                 AFS_WORK_ITEM_TAG);
         }
 
         AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -2800,7 +2814,8 @@ AFSPostedDeferredWrite( IN PVOID Context1,
 
         AFSCompleteRequest( pWorkItem->Specific.AsynchIo.Irp, ntStatus);
 
-        ExFreePoolWithTag( pWorkItem, AFS_WORK_ITEM_TAG);
+       AFSExFreePoolWithTag( pWorkItem,
+                             AFS_WORK_ITEM_TAG);
 
         AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING | AFS_SUBSYSTEM_WORKER_PROCESSING,
                       AFS_TRACE_LEVEL_ERROR,
index fd91081..45a1358 100644 (file)
@@ -1426,6 +1426,10 @@ AFSLibExAllocatePoolWithTag( IN POOL_TYPE  PoolType,
                              IN SIZE_T  NumberOfBytes,
                              IN ULONG  Tag);
 
+#define AFSLibExFreePool(x)          ExFreePool(x)
+
+#define AFSLibExFreePoolWithTag(x,y) ExFreePoolWithTag(x,y)
+
 BOOLEAN
 AFSValidNameFormat( IN UNICODE_STRING *FileName);