// Delete matching DNS Cache entry\r
//\r
RemoveEntryList (&Item->AllCacheLink);\r
+\r
+ FreePool (Item->DnsCache.HostName);\r
+ FreePool (Item->DnsCache.IpAddress);\r
+ FreePool (Item);\r
\r
return EFI_SUCCESS;\r
} else if (Override) {\r
\r
NewDnsCache->DnsCache.HostName = AllocatePool (StrSize (DnsCacheEntry.HostName));\r
if (NewDnsCache->DnsCache.HostName == NULL) { \r
+ FreePool (NewDnsCache);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
CopyMem (NewDnsCache->DnsCache.HostName, DnsCacheEntry.HostName, StrSize (DnsCacheEntry.HostName));\r
\r
NewDnsCache->DnsCache.IpAddress = AllocatePool (sizeof (EFI_IPv4_ADDRESS));\r
- if (NewDnsCache->DnsCache.IpAddress == NULL) { \r
+ if (NewDnsCache->DnsCache.IpAddress == NULL) {\r
+ FreePool (NewDnsCache->DnsCache.HostName);\r
+ FreePool (NewDnsCache);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
//\r
RemoveEntryList (&Item->AllCacheLink);\r
\r
+ FreePool (Item->DnsCache.HostName);\r
+ FreePool (Item->DnsCache.IpAddress);\r
+ FreePool (Item);\r
+ \r
return EFI_SUCCESS;\r
} else if (Override) {\r
//\r
\r
NewDnsCache->DnsCache.HostName = AllocatePool (StrSize (DnsCacheEntry.HostName));\r
if (NewDnsCache->DnsCache.HostName == NULL) { \r
+ FreePool (NewDnsCache);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
CopyMem (NewDnsCache->DnsCache.HostName, DnsCacheEntry.HostName, StrSize (DnsCacheEntry.HostName));\r
\r
NewDnsCache->DnsCache.IpAddress = AllocatePool (sizeof (EFI_IPv6_ADDRESS));\r
- if (NewDnsCache->DnsCache.IpAddress == NULL) { \r
+ if (NewDnsCache->DnsCache.IpAddress == NULL) {\r
+ FreePool (NewDnsCache->DnsCache.HostName);\r
+ FreePool (NewDnsCache);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
//\r
// It's the GeneralLookUp querying.\r
//\r
- Dns4TokenEntry->Token->RspData.GLookupData = AllocatePool (sizeof (DNS_RESOURCE_RECORD));\r
+ Dns4TokenEntry->Token->RspData.GLookupData = AllocateZeroPool (sizeof (DNS_RESOURCE_RECORD));\r
if (Dns4TokenEntry->Token->RspData.GLookupData == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
}\r
- Dns4TokenEntry->Token->RspData.GLookupData->RRList = AllocatePool (DnsHeader->AnswersNum * sizeof (DNS_RESOURCE_RECORD));\r
+ Dns4TokenEntry->Token->RspData.GLookupData->RRList = AllocateZeroPool (DnsHeader->AnswersNum * sizeof (DNS_RESOURCE_RECORD));\r
if (Dns4TokenEntry->Token->RspData.GLookupData->RRList == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
// It's not the GeneralLookUp querying. Check the Query type.\r
//\r
if (QuerySection->Type == DNS_TYPE_A) {\r
- Dns4TokenEntry->Token->RspData.H2AData = AllocatePool (sizeof (DNS_HOST_TO_ADDR_DATA));\r
+ Dns4TokenEntry->Token->RspData.H2AData = AllocateZeroPool (sizeof (DNS_HOST_TO_ADDR_DATA));\r
if (Dns4TokenEntry->Token->RspData.H2AData == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
}\r
- Dns4TokenEntry->Token->RspData.H2AData->IpList = AllocatePool (DnsHeader->AnswersNum * sizeof (EFI_IPv4_ADDRESS));\r
+ Dns4TokenEntry->Token->RspData.H2AData->IpList = AllocateZeroPool (DnsHeader->AnswersNum * sizeof (EFI_IPv4_ADDRESS));\r
if (Dns4TokenEntry->Token->RspData.H2AData->IpList == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
//\r
// It's the GeneralLookUp querying.\r
//\r
- Dns6TokenEntry->Token->RspData.GLookupData = AllocatePool (sizeof (DNS_RESOURCE_RECORD));\r
+ Dns6TokenEntry->Token->RspData.GLookupData = AllocateZeroPool (sizeof (DNS_RESOURCE_RECORD));\r
if (Dns6TokenEntry->Token->RspData.GLookupData == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
}\r
- Dns6TokenEntry->Token->RspData.GLookupData->RRList = AllocatePool (DnsHeader->AnswersNum * sizeof (DNS_RESOURCE_RECORD));\r
+ Dns6TokenEntry->Token->RspData.GLookupData->RRList = AllocateZeroPool (DnsHeader->AnswersNum * sizeof (DNS_RESOURCE_RECORD));\r
if (Dns6TokenEntry->Token->RspData.GLookupData->RRList == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
// It's not the GeneralLookUp querying. Check the Query type.\r
//\r
if (QuerySection->Type == DNS_TYPE_AAAA) {\r
- Dns6TokenEntry->Token->RspData.H2AData = AllocatePool (sizeof (DNS6_HOST_TO_ADDR_DATA));\r
+ Dns6TokenEntry->Token->RspData.H2AData = AllocateZeroPool (sizeof (DNS6_HOST_TO_ADDR_DATA));\r
if (Dns6TokenEntry->Token->RspData.H2AData == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
}\r
- Dns6TokenEntry->Token->RspData.H2AData->IpList = AllocatePool (DnsHeader->AnswersNum * sizeof (EFI_IPv6_ADDRESS));\r
+ Dns6TokenEntry->Token->RspData.H2AData->IpList = AllocateZeroPool (DnsHeader->AnswersNum * sizeof (EFI_IPv6_ADDRESS));\r
if (Dns6TokenEntry->Token->RspData.H2AData->IpList == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_EXIT;\r
}\r
\r
ON_EXIT:\r
+ //\r
+ // Free the allocated buffer if error happen.\r
+ //\r
+ if (EFI_ERROR (Status)) {\r
+ if (Dns4TokenEntry != NULL) {\r
+ if (Dns4TokenEntry->GeneralLookUp) {\r
+ if (Dns4TokenEntry->Token->RspData.GLookupData != NULL) {\r
+ if (Dns4TokenEntry->Token->RspData.GLookupData->RRList != NULL) {\r
+ while (RRCount != 0) {\r
+ RRCount --;\r
+ if (Dns4TokenEntry->Token->RspData.GLookupData->RRList[RRCount].QName != NULL) {\r
+ FreePool (Dns4TokenEntry->Token->RspData.GLookupData->RRList[RRCount].QName);\r
+ }\r
+\r
+ if (Dns4TokenEntry->Token->RspData.GLookupData->RRList[RRCount].RData != NULL) {\r
+ FreePool (Dns4TokenEntry->Token->RspData.GLookupData->RRList[RRCount].RData);\r
+ }\r
+ }\r
+ \r
+ FreePool (Dns4TokenEntry->Token->RspData.GLookupData->RRList);\r
+ }\r
+ \r
+ FreePool (Dns4TokenEntry->Token->RspData.GLookupData);\r
+ }\r
+ } else {\r
+ if (QuerySection->Type == DNS_TYPE_A && Dns4TokenEntry->Token->RspData.H2AData != NULL) {\r
+ if (Dns4TokenEntry->Token->RspData.H2AData->IpList != NULL) {\r
+ FreePool (Dns4TokenEntry->Token->RspData.H2AData->IpList);\r
+ }\r
+ \r
+ FreePool (Dns4TokenEntry->Token->RspData.H2AData);\r
+ }\r
+ }\r
+ }\r
+\r
+ if (Dns6TokenEntry != NULL) {\r
+ if (Dns6TokenEntry->GeneralLookUp) {\r
+ if (Dns6TokenEntry->Token->RspData.GLookupData != NULL) {\r
+ if (Dns6TokenEntry->Token->RspData.GLookupData->RRList != NULL) {\r
+ while (RRCount != 0) {\r
+ RRCount --;\r
+ if (Dns6TokenEntry->Token->RspData.GLookupData->RRList[RRCount].QName != NULL) {\r
+ FreePool (Dns6TokenEntry->Token->RspData.GLookupData->RRList[RRCount].QName);\r
+ }\r
+\r
+ if (Dns6TokenEntry->Token->RspData.GLookupData->RRList[RRCount].RData != NULL) {\r
+ FreePool (Dns6TokenEntry->Token->RspData.GLookupData->RRList[RRCount].RData);\r
+ }\r
+ }\r
+ \r
+ FreePool (Dns6TokenEntry->Token->RspData.GLookupData->RRList);\r
+ }\r
+ \r
+ FreePool (Dns6TokenEntry->Token->RspData.GLookupData);\r
+ }\r
+ } else {\r
+ if (QuerySection->Type == DNS_TYPE_AAAA && Dns6TokenEntry->Token->RspData.H2AData != NULL) {\r
+ if (Dns6TokenEntry->Token->RspData.H2AData->IpList != NULL) {\r
+ FreePool (Dns6TokenEntry->Token->RspData.H2AData->IpList);\r
+ }\r
+ \r
+ FreePool (Dns6TokenEntry->Token->RspData.H2AData);\r
+ }\r
+ }\r
+ }\r
+\r
+ if (Dns4CacheEntry != NULL) {\r
+ if (Dns4CacheEntry->HostName != NULL) {\r
+ FreePool (Dns4CacheEntry->HostName);\r
+ }\r
+\r
+ if (Dns4CacheEntry->IpAddress != NULL) {\r
+ FreePool (Dns4CacheEntry->IpAddress);\r
+ }\r
+\r
+ FreePool (Dns4CacheEntry);\r
+ }\r
+\r
+ if (Dns6CacheEntry != NULL) {\r
+ if (Dns6CacheEntry->HostName != NULL) {\r
+ FreePool (Dns6CacheEntry->HostName);\r
+ }\r
+\r
+ if (Dns6CacheEntry->IpAddress != NULL) {\r
+ FreePool (Dns6CacheEntry->IpAddress);\r
+ }\r
+\r
+ FreePool (Dns6CacheEntry);\r
+ } \r
+ }\r
+ \r
gBS->RestoreTPL (OldTpl);\r
return Status;\r
}\r
Item4 = NET_LIST_USER_STRUCT (Entry, DNS4_CACHE, AllCacheLink);\r
if (Item4->DnsCache.Timeout == 0) {\r
RemoveEntryList (&Item4->AllCacheLink);\r
+ FreePool (Item4->DnsCache.HostName);\r
+ FreePool (Item4->DnsCache.IpAddress);\r
+ FreePool (Item4);\r
Entry = mDriverData->Dns4CacheList.ForwardLink;\r
} else {\r
Entry = Entry->ForwardLink;\r
Item6 = NET_LIST_USER_STRUCT (Entry, DNS6_CACHE, AllCacheLink);\r
if (Item6->DnsCache.Timeout == 0) {\r
RemoveEntryList (&Item6->AllCacheLink);\r
+ FreePool (Item6->DnsCache.HostName);\r
+ FreePool (Item6->DnsCache.IpAddress);\r
+ FreePool (Item6);\r
Entry = mDriverData->Dns6CacheList.ForwardLink;\r
} else {\r
Entry = Entry->ForwardLink;\r