]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
NetworkPkg: Replace ASSERT with error return code in PXE and HTTP boot driver.
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDhcp6.c
index ca84f2ad9b8242c737f40c978e335d680eda15f6..f2b81957b7189e0dbe4faaadeffc8fd7a2c17117 100644 (file)
@@ -329,17 +329,24 @@ HttpBootParseDhcp6Packet (
   @param[in]  Dst          The pointer to the cache buffer for DHCPv6 packet.\r
   @param[in]  Src          The pointer to the DHCPv6 packet to be cached.\r
 \r
+  @retval     EFI_SUCCESS                Packet is copied.\r
+  @retval     EFI_BUFFER_TOO_SMALL       Cache buffer is not big enough to hold the packet.\r
+\r
 **/\r
-VOID\r
+EFI_STATUS\r
 HttpBootCacheDhcp6Packet (\r
   IN EFI_DHCP6_PACKET          *Dst,\r
   IN EFI_DHCP6_PACKET          *Src\r
   )\r
 {\r
-  ASSERT (Dst->Size >= Src->Length);\r
+  if (Dst->Size < Src->Length) {\r
+    return EFI_BUFFER_TOO_SMALL;\r
+  }\r
 \r
   CopyMem (&Dst->Dhcp6, &Src->Dhcp6, Src->Length);\r
   Dst->Length = Src->Length;\r
+  \r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
@@ -348,8 +355,11 @@ HttpBootCacheDhcp6Packet (
   @param[in]  Private               The pointer to HTTP_BOOT_PRIVATE_DATA.\r
   @param[in]  RcvdOffer             The pointer to the received offer packet.\r
 \r
+  @retval     EFI_SUCCESS      Cache and parse the packet successfully.\r
+  @retval     Others           Operation failed.\r
+\r
 **/\r
-VOID\r
+EFI_STATUS\r
 HttpBootCacheDhcp6Offer (\r
   IN HTTP_BOOT_PRIVATE_DATA  *Private,\r
   IN EFI_DHCP6_PACKET        *RcvdOffer\r
@@ -358,6 +368,7 @@ HttpBootCacheDhcp6Offer (
   HTTP_BOOT_DHCP6_PACKET_CACHE   *Cache6;\r
   EFI_DHCP6_PACKET               *Offer;\r
   HTTP_BOOT_OFFER_TYPE           OfferType;\r
+  EFI_STATUS                     Status;\r
 \r
   Cache6 = &Private->OfferBuffer[Private->OfferNum].Dhcp6;\r
   Offer  = &Cache6->Packet.Offer;\r
@@ -365,13 +376,16 @@ HttpBootCacheDhcp6Offer (
   //\r
   // Cache the content of DHCPv6 packet firstly.\r
   //\r
-  HttpBootCacheDhcp6Packet(Offer, RcvdOffer);\r
+  Status = HttpBootCacheDhcp6Packet(Offer, RcvdOffer);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
 \r
   //\r
   // Validate the DHCPv6 packet, and parse the options and offer type.\r
   //\r
   if (EFI_ERROR (HttpBootParseDhcp6Packet (Cache6))) {\r
-    return ;\r
+    return EFI_ABORTED;\r
   }\r
 \r
   //\r
@@ -382,7 +396,9 @@ HttpBootCacheDhcp6Offer (
   ASSERT (Private->OfferCount[OfferType] < HTTP_BOOT_OFFER_MAX_NUM);\r
   Private->OfferIndex[OfferType][Private->OfferCount[OfferType]] = Private->OfferNum;\r
   Private->OfferCount[OfferType]++;\r
-  Private->OfferNum++;  \r
+  Private->OfferNum++;\r
+  \r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
@@ -437,6 +453,7 @@ HttpBootDhcp6CallBack (
        //\r
        // Cache the dhcp offers to OfferBuffer[] for select later, and record\r
        // the OfferIndex and OfferCount.\r
+       // If error happens, just ignore this packet and continue to wait more offer.\r
        //\r
        HttpBootCacheDhcp6Offer (Private, Packet);\r
      }\r