mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
- Fix memory leaks when reading strings and binary values from the registry
- Fix list manipulation svn path=/trunk/; revision=43032
This commit is contained in:
parent
172aed5aa9
commit
6672b72619
2 changed files with 39 additions and 9 deletions
|
@ -41,7 +41,8 @@ typedef struct _NDIS_M_DEVICE_BLOCK {
|
|||
} NDIS_M_DEVICE_BLOCK, *PNDIS_M_DEVICE_BLOCK;
|
||||
|
||||
/* resources allocated on behalf on the miniport */
|
||||
#define MINIPORT_RESOURCE_TYPE_MEMORY 0
|
||||
#define MINIPORT_RESOURCE_TYPE_REGISTRY_DATA 0
|
||||
#define MINIPORT_RESOURCE_TYPE_MEMORY 1
|
||||
typedef struct _MINIPORT_RESOURCE {
|
||||
LIST_ENTRY ListEntry;
|
||||
ULONG ResourceType;
|
||||
|
|
|
@ -139,14 +139,43 @@ NdisCloseConfiguration(
|
|||
{
|
||||
PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext = (PMINIPORT_CONFIGURATION_CONTEXT)ConfigurationHandle;
|
||||
PMINIPORT_RESOURCE Resource;
|
||||
PNDIS_CONFIGURATION_PARAMETER ParameterValue;
|
||||
PLIST_ENTRY CurrentEntry;
|
||||
|
||||
while(!IsListEmpty(&ConfigurationContext->ResourceListHead))
|
||||
while((CurrentEntry = ExInterlockedRemoveHeadList(&ConfigurationContext->ResourceListHead,
|
||||
&ConfigurationContext->ResourceLock)) != NULL)
|
||||
{
|
||||
Resource = (PMINIPORT_RESOURCE)ExInterlockedRemoveHeadList(&ConfigurationContext->ResourceListHead, &ConfigurationContext->ResourceLock);
|
||||
if(Resource->ResourceType == MINIPORT_RESOURCE_TYPE_MEMORY)
|
||||
Resource = CONTAINING_RECORD(CurrentEntry, MINIPORT_RESOURCE, ListEntry);
|
||||
switch(Resource->ResourceType)
|
||||
{
|
||||
case MINIPORT_RESOURCE_TYPE_REGISTRY_DATA:
|
||||
ParameterValue = Resource->Resource;
|
||||
|
||||
switch (ParameterValue->ParameterType)
|
||||
{
|
||||
case NdisParameterBinary:
|
||||
ExFreePool(ParameterValue->ParameterData.BinaryData.Buffer);
|
||||
break;
|
||||
|
||||
case NdisParameterString:
|
||||
case NdisParameterMultiString:
|
||||
ExFreePool(ParameterValue->ParameterData.StringData.Buffer);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Fall through to free NDIS_CONFIGURATION_PARAMETER struct */
|
||||
|
||||
case MINIPORT_RESOURCE_TYPE_MEMORY:
|
||||
NDIS_DbgPrint(MAX_TRACE,("freeing 0x%x\n", Resource->Resource));
|
||||
ExFreePool(Resource->Resource);
|
||||
break;
|
||||
|
||||
default:
|
||||
NDIS_DbgPrint(MIN_TRACE,("Unknown resource type: %d\n", Resource->ResourceType));
|
||||
break;
|
||||
}
|
||||
|
||||
ExFreePool(Resource);
|
||||
|
@ -359,7 +388,7 @@ NdisReadConfiguration(
|
|||
return;
|
||||
}
|
||||
|
||||
MiniportResource->ResourceType = 0;
|
||||
MiniportResource->ResourceType = MINIPORT_RESOURCE_TYPE_REGISTRY_DATA;
|
||||
MiniportResource->Resource = *ParameterValue;
|
||||
|
||||
NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n",
|
||||
|
@ -398,7 +427,7 @@ NdisReadConfiguration(
|
|||
return;
|
||||
}
|
||||
|
||||
MiniportResource->ResourceType = 0;
|
||||
MiniportResource->ResourceType = MINIPORT_RESOURCE_TYPE_REGISTRY_DATA;
|
||||
MiniportResource->Resource = *ParameterValue;
|
||||
NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource));
|
||||
ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead,
|
||||
|
@ -434,7 +463,7 @@ NdisReadConfiguration(
|
|||
return;
|
||||
}
|
||||
|
||||
MiniportResource->ResourceType = 0;
|
||||
MiniportResource->ResourceType = MINIPORT_RESOURCE_TYPE_REGISTRY_DATA;
|
||||
MiniportResource->Resource = *ParameterValue;
|
||||
NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource));
|
||||
ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead,
|
||||
|
@ -578,7 +607,7 @@ NdisReadConfiguration(
|
|||
}
|
||||
}
|
||||
|
||||
MiniportResource->ResourceType = MINIPORT_RESOURCE_TYPE_MEMORY;
|
||||
MiniportResource->ResourceType = MINIPORT_RESOURCE_TYPE_REGISTRY_DATA;
|
||||
MiniportResource->Resource = *ParameterValue;
|
||||
|
||||
ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock);
|
||||
|
@ -731,7 +760,7 @@ NdisReadNetworkAddress(
|
|||
return;
|
||||
}
|
||||
|
||||
MiniportResource->ResourceType = 0;
|
||||
MiniportResource->ResourceType = MINIPORT_RESOURCE_TYPE_MEMORY;
|
||||
MiniportResource->Resource = IntArray;
|
||||
NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource));
|
||||
ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock);
|
||||
|
|
Loading…
Reference in a new issue