v2:
*Use goto to simplify code logic.

This patch is used to replace ASSERT with error handling in
DnsDxe driver.

Cc: Ye Ting <ting...@intel.com>
Cc: Fu Siyuan <siyuan...@intel.com>
Cc: Zhang Lubo <lubo.zh...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin...@intel.com>
---
 NetworkPkg/DnsDxe/DnsProtocol.c | 56 ++++++++++++++++++++++++++++-------------
 1 file changed, 38 insertions(+), 18 deletions(-)

diff --git a/NetworkPkg/DnsDxe/DnsProtocol.c b/NetworkPkg/DnsDxe/DnsProtocol.c
index e9101d6..64fca6a 100644
--- a/NetworkPkg/DnsDxe/DnsProtocol.c
+++ b/NetworkPkg/DnsDxe/DnsProtocol.c
@@ -86,23 +86,22 @@ Dns4GetModeData (
 
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
     
   Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL4 (This);
   if (Instance->State == DNS_STATE_UNCONFIGED) {
-    gBS->RestoreTPL (OldTpl);
-    return  EFI_NOT_STARTED;
+    Status = EFI_NOT_STARTED;
+    goto ON_EXIT;
   }
   
   ZeroMem (DnsModeData, sizeof (EFI_DNS4_MODE_DATA));
 
   //
   // Get the current configuration data of this instance. 
   //
   Status = Dns4CopyConfigure (&DnsModeData->DnsConfigData, 
&Instance->Dns4CfgData);
   if (EFI_ERROR (Status)) {
-    gBS->RestoreTPL (OldTpl);
-    return Status;
+    goto ON_EXIT;
   }
 
   //
   // Get the DnsServerCount and DnsServerList
   //
@@ -110,11 +109,16 @@ Dns4GetModeData (
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns4ServerList) {
     Index++;
   }
   DnsModeData->DnsServerCount = (UINT32) Index;
   ServerList = AllocatePool (sizeof (EFI_IPv4_ADDRESS) * 
DnsModeData->DnsServerCount);
-  ASSERT (ServerList != NULL);
+  if (ServerList == NULL) {
+    Status = EFI_OUT_OF_RESOURCES;
+    Dns4CleanConfigure (&DnsModeData->DnsConfigData);
+    goto ON_EXIT;
+  }
+  
   Index = 0;
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns4ServerList) {
     ServerItem = NET_LIST_USER_STRUCT (Entry, DNS4_SERVER_IP, AllServerLink);
     CopyMem (ServerList + Index, &ServerItem->Dns4ServerIp, sizeof 
(EFI_IPv4_ADDRESS));
     Index++;
@@ -128,22 +132,28 @@ Dns4GetModeData (
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns4CacheList) {
     Index++;
   }
   DnsModeData->DnsCacheCount = (UINT32) Index;
   CacheList = AllocatePool (sizeof (EFI_DNS4_CACHE_ENTRY) * 
DnsModeData->DnsCacheCount);
-  ASSERT (CacheList != NULL);
+  if (CacheList == NULL) {
+    Status = EFI_OUT_OF_RESOURCES;
+    Dns4CleanConfigure (&DnsModeData->DnsConfigData);
+    FreePool (ServerList);
+    goto ON_EXIT;
+  }
+  
   Index =0;
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns4CacheList) {
     CacheItem = NET_LIST_USER_STRUCT (Entry, DNS4_CACHE, AllCacheLink);
     CopyMem (CacheList + Index, &CacheItem->DnsCache, sizeof 
(EFI_DNS4_CACHE_ENTRY));
     Index++;
   }
   DnsModeData->DnsCacheList = CacheList;
 
+ON_EXIT:
   gBS->RestoreTPL (OldTpl);
-  
-  return EFI_SUCCESS;
+  return Status;
 }
 
 /**
   Configure this DNS instance.
 
@@ -907,23 +917,22 @@ Dns6GetModeData (
 
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
     
   Instance  = DNS_INSTANCE_FROM_THIS_PROTOCOL6 (This);
   if (Instance->State == DNS_STATE_UNCONFIGED) {
-    gBS->RestoreTPL (OldTpl);
-    return  EFI_NOT_STARTED;
+    Status =  EFI_NOT_STARTED;
+    goto ON_EXIT;
   }
 
   ZeroMem (DnsModeData, sizeof (EFI_DNS6_MODE_DATA));
 
   //
   // Get the current configuration data of this instance. 
   //
-  Status = Dns6CopyConfigure(&DnsModeData->DnsConfigData, 
&Instance->Dns6CfgData);
+  Status = Dns6CopyConfigure (&DnsModeData->DnsConfigData, 
&Instance->Dns6CfgData);
   if (EFI_ERROR (Status)) {
-    gBS->RestoreTPL (OldTpl);
-    return Status;
+    goto ON_EXIT;
   }
   
   //
   // Get the DnsServerCount and DnsServerList
   //
@@ -931,11 +940,16 @@ Dns6GetModeData (
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns6ServerList) {
     Index++;
   }
   DnsModeData->DnsServerCount = (UINT32) Index;
   ServerList = AllocatePool (sizeof(EFI_IPv6_ADDRESS) * 
DnsModeData->DnsServerCount);
-  ASSERT (ServerList != NULL);
+  if (ServerList == NULL) {
+    Status = EFI_OUT_OF_RESOURCES;
+    Dns6CleanConfigure (&DnsModeData->DnsConfigData);
+    goto ON_EXIT;
+  }
+  
   Index = 0;
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns6ServerList) {
     ServerItem = NET_LIST_USER_STRUCT (Entry, DNS6_SERVER_IP, AllServerLink);
     CopyMem (ServerList + Index, &ServerItem->Dns6ServerIp, sizeof 
(EFI_IPv6_ADDRESS));
     Index++;
@@ -949,22 +963,28 @@ Dns6GetModeData (
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns6CacheList) {
     Index++;
   }
   DnsModeData->DnsCacheCount = (UINT32) Index;
   CacheList = AllocatePool (sizeof(EFI_DNS6_CACHE_ENTRY) * 
DnsModeData->DnsCacheCount);
-  ASSERT (CacheList != NULL);
+  if (CacheList == NULL) {
+    Status = EFI_OUT_OF_RESOURCES;
+    Dns6CleanConfigure (&DnsModeData->DnsConfigData);
+    FreePool (ServerList);
+    goto ON_EXIT;
+  }
+  
   Index =0;
   NET_LIST_FOR_EACH_SAFE (Entry, Next, &mDriverData->Dns6CacheList) {
     CacheItem = NET_LIST_USER_STRUCT (Entry, DNS6_CACHE, AllCacheLink);
     CopyMem (CacheList + Index, &CacheItem->DnsCache, sizeof 
(EFI_DNS6_CACHE_ENTRY));
     Index++;
   }
   DnsModeData->DnsCacheList = CacheList;
-
-  gBS->RestoreTPL (OldTpl);
   
-  return EFI_SUCCESS;
+ON_EXIT:
+  gBS->RestoreTPL (OldTpl);
+  return Status;
 }
 
 /**
   Configure this DNS instance.
 
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to