]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix 3 K8 issues for PXE module
authorhhuan13 <hhuan13@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 14 May 2010 07:47:29 +0000 (07:47 +0000)
committerhhuan13 <hhuan13@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 14 May 2010 07:47:29 +0000 (07:47 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10489 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c

index 2b0c9e0a8b5e319fc7e44575a97f3d8d6a39162d..2dc7471fe246ce912042b2bb38ffb003004a198c 100644 (file)
@@ -1832,6 +1832,8 @@ PxeBcSelectBootMenu (
     gST->ConOut->SetCursorPosition (gST->ConOut, 0, TopRow + MenuNum);\r
   } while (!Finish);\r
 \r
+   ASSERT (Select < PXEBC_MAX_MENU_NUM);\r
+\r
   //\r
   // Swap the byte order\r
   //\r
index 57f588efd32be4f85242c9f088a94e63a6c61920..54b82bd3bb860c42abbe774c240fa67f89399e35 100644 (file)
@@ -749,6 +749,7 @@ EfiPxeBcDiscover (
   PXEBC_PRIVATE_DATA              *Private;\r
   EFI_PXE_BASE_CODE_MODE          *Mode;\r
   EFI_PXE_BASE_CODE_DISCOVER_INFO DefaultInfo;\r
+  EFI_PXE_BASE_CODE_DISCOVER_INFO *CreatedInfo;\r
   EFI_PXE_BASE_CODE_SRVLIST       *SrvList;\r
   EFI_PXE_BASE_CODE_SRVLIST       DefaultSrvList;\r
   PXEBC_CACHED_DHCP4_PACKET       *Packet;\r
@@ -765,6 +766,7 @@ EfiPxeBcDiscover (
   Mode              = Private->PxeBc.Mode;\r
   BootSvrEntry      = NULL;\r
   SrvList           = NULL;\r
+  CreatedInfo       = NULL;\r
   Status            = EFI_DEVICE_ERROR;\r
   Private->Function = EFI_PXE_BASE_CODE_FUNCTION_DISCOVER;\r
 \r
@@ -831,6 +833,8 @@ EfiPxeBcDiscover (
     }\r
 \r
     DefaultInfo.IpCnt = 0;\r
+    Info    = &DefaultInfo;\r
+    SrvList = Info->SrvList;\r
 \r
     if (DefaultInfo.MustUseList) {\r
       BootSvrEntry  = VendorOpt->BootSvr;\r
@@ -851,9 +855,25 @@ EfiPxeBcDiscover (
       }\r
 \r
       DefaultInfo.IpCnt = BootSvrEntry->IpCnt;\r
+\r
+      if (DefaultInfo.IpCnt >= 1) {\r
+        CreatedInfo = AllocatePool (sizeof (DefaultInfo) + (DefaultInfo.IpCnt - 1) * sizeof (*SrvList));\r
+        if (CreatedInfo == NULL) {\r
+          return EFI_OUT_OF_RESOURCES;\r
+        }     \r
+      \r
+        CopyMem (CreatedInfo, &DefaultInfo, sizeof (DefaultInfo));\r
+        Info    = CreatedInfo;\r
+        SrvList = Info->SrvList;\r
+      }\r
+\r
+      for (Index = 0; Index < DefaultInfo.IpCnt; Index++) {\r
+        CopyMem (&SrvList[Index].IpAddr, &BootSvrEntry->IpAddr[Index], sizeof (EFI_IPv4_ADDRESS));\r
+        SrvList[Index].AcceptAnyResponse   = FALSE;\r
+        SrvList[Index].Type                = BootSvrEntry->Type;\r
+      }\r
     }\r
 \r
-    Info = &DefaultInfo;\r
   } else {\r
 \r
     SrvList = Info->SrvList;\r
@@ -904,6 +924,9 @@ EfiPxeBcDiscover (
                 TRUE,\r
                 &Private->PxeReply.Packet.Ack\r
                 );\r
+      if (!EFI_ERROR (Status)) {\r
+        break;\r
+      }                \r
     }\r
 \r
   } else if (Info->UseMCast) {\r
@@ -953,6 +976,10 @@ EfiPxeBcDiscover (
       );\r
   }\r
 \r
+  if (CreatedInfo != NULL) {\r
+    FreePool (CreatedInfo);\r
+  }\r
+  \r
   return Status;\r
 }\r
 \r
@@ -1524,7 +1551,7 @@ EfiPxeBcUdpRead (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if ((BufferSize == NULL) || ((BufferPtr == NULL) && (*BufferSize != 0))) {\r
+  if ((BufferSize == NULL) || (BufferPtr == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r