]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix K8 report bugs.
authorhfang <hfang@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 21 Apr 2009 06:33:31 +0000 (06:33 +0000)
committerhfang <hfang@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 21 Apr 2009 06:33:31 +0000 (06:33 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8139 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaIo.c
IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/Ide.c
IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBus.c
IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciDeviceSupport.c
IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.c

index da1aa940948f2524601be3ac1a0baacaf0e232da..3907e0a6c76e39f297ad8cb6fb72955e8f91f5af 100644 (file)
@@ -1065,6 +1065,11 @@ IsaIoMap_FullSupport (
   if (Operation < 0 || Operation >= EfiIsaIoOperationMaximum) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
+\r
+  if (ChannelNumber >= 8) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   //\r
   // See if this is a Slave DMA Operation\r
   //\r
index 6ffc2fcf2be5823b921682eb4e1c7c06c3aef42c..ed02b38dcfa28ccd228a5c60f897de12338915df 100644 (file)
@@ -373,6 +373,10 @@ ReassignIdeResources (
   UINT16                  CommandBlockBaseAddr;\r
   UINT16                  ControlBlockBaseAddr;\r
 \r
+  if (IdeDev->Channel >= IdeMaxChannel) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
   //\r
   // Requery IDE IO port registers' base addresses in case of the switch of\r
   // native and legacy modes\r
index fb86e554809e507eb4ef598e051ff174294b5bb5..b09bb8a53f3fcb6d1cbb32b82a448d6320c77688 100644 (file)
@@ -360,6 +360,14 @@ IDEBusDriverBindingStart (
     EndIdeChannel       = BeginningIdeChannel;\r
     BeginningIdeDevice  = Node->Atapi.SlaveMaster;\r
     EndIdeDevice        = BeginningIdeDevice;\r
+    if (BeginningIdeChannel >= IdeMaxChannel || EndIdeChannel >= IdeMaxChannel) {\r
+      Status = EFI_INVALID_PARAMETER;\r
+      goto ErrorExit;\r
+    }\r
+    if (BeginningIdeDevice >= IdeMaxDevice|| EndIdeDevice >= IdeMaxDevice) {\r
+      Status = EFI_INVALID_PARAMETER;\r
+      goto ErrorExit;\r
+    }\r
   }\r
 \r
   //\r
@@ -1030,8 +1038,9 @@ DeRegisterIdeDevice (
   // Release allocated resources\r
   //\r
   Index = IdeBlkIoDevice->Channel * 2 + IdeBlkIoDevice->Device;\r
-  IdeBlkIoDevice->IdeBusDriverPrivateData->HaveScannedDevice[Index] = FALSE;\r
-\r
+  if (Index < MAX_IDE_DEVICE) {\r
+    IdeBlkIoDevice->IdeBusDriverPrivateData->HaveScannedDevice[Index] = FALSE;\r
+  }\r
   ReleaseIdeResources (IdeBlkIoDevice);\r
 \r
   return EFI_SUCCESS;\r
index d461aef4d0dff846eeeb8b825613c940b09e746d..320eb4c62d2dd1982c48263e3080d384b2842b5a 100644 (file)
@@ -1202,7 +1202,11 @@ GetHpcPciAddressFromRootBridge (
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  *PciAddress = EFI_PCI_ADDRESS (Temp->BusNumber, Temp->DeviceNumber, Temp->FunctionNumber, 0);\r
+  if (Temp != NULL) {\r
+    *PciAddress = EFI_PCI_ADDRESS (Temp->BusNumber, Temp->DeviceNumber, Temp->FunctionNumber, 0);\r
+  } else {\r
+    return EFI_NOT_FOUND;\r
+  }\r
 \r
   return EFI_SUCCESS;\r
 \r
index 24755b002a40cbac19fc8b490d7219070a05c034..532f392ca5bc3c333da5de5c09299b7bfc75bb2a 100644 (file)
@@ -127,14 +127,15 @@ MakeTable (
   UINT16  WordOfStart;\r
   UINT16  WordOfCount;\r
 \r
-  for (Index = 1; Index <= 16; Index++) {\r
+  for (Index = 0; Index <= 16; Index++) {\r
     Count[Index] = 0;\r
   }\r
 \r
   for (Index = 0; Index < NumOfChar; Index++) {\r
     Count[BitLen[Index]]++;\r
   }\r
-\r
+  \r
+  Start[0] = 0;\r
   Start[1] = 0;\r
 \r
   for (Index = 1; Index <= 16; Index++) {\r
@@ -149,7 +150,8 @@ MakeTable (
   }\r
 \r
   JuBits = (UINT16) (16 - TableBits);\r
-\r
+  \r
+  Weight[0] = 0;\r
   for (Index = 1; Index <= TableBits; Index++) {\r
     Start[Index] >>= JuBits;\r
     Weight[Index] = (UINT16) (1U << (TableBits - Index));\r
@@ -157,15 +159,15 @@ MakeTable (
 \r
   while (Index <= 16) {\r
     Weight[Index] = (UINT16) (1U << (16 - Index));\r
-    Index++;\r
+    Index++;    \r
   }\r
 \r
   Index = (UINT16) (Start[TableBits + 1] >> JuBits);\r
 \r
   if (Index != 0) {\r
     Index3 = (UINT16) (1U << TableBits);\r
-    while (Index != Index3) {\r
-      Table[Index++] = 0;\r
+    if (Index < Index3) {\r
+      SetMem16 (Table + Index, (Index3 - Index) * sizeof (*Table), 0);\r
     }\r
   }\r
 \r
@@ -175,7 +177,7 @@ MakeTable (
   for (Char = 0; Char < NumOfChar; Char++) {\r
 \r
     Len = BitLen[Char];\r
-    if (Len == 0) {\r
+    if (Len == 0 || Len >= 17) {\r
       continue;\r
     }\r
 \r
@@ -194,15 +196,17 @@ MakeTable (
       Index   = (UINT16) (Len - TableBits);\r
 \r
       while (Index != 0) {\r
-        if (*Pointer == 0) {\r
-          Sd->mRight[Avail]                     = Sd->mLeft[Avail] = 0;\r
+        if (*Pointer == 0 && Avail < (2 * NC - 1)) {\r
+          Sd->mRight[Avail] = Sd->mLeft[Avail] = 0;\r
           *Pointer = Avail++;\r
         }\r
-\r
-        if (Index3 & Mask) {\r
-          Pointer = &Sd->mRight[*Pointer];\r
-        } else {\r
-          Pointer = &Sd->mLeft[*Pointer];\r
+        \r
+        if (*Pointer < (2 * NC - 1)) {\r
+          if ((Index3 & Mask) != 0) {\r
+            Pointer = &Sd->mRight[*Pointer];\r
+          } else {\r
+            Pointer = &Sd->mLeft[*Pointer];\r
+          }\r
         }\r
 \r
         Index3 <<= 1;\r
@@ -294,28 +298,37 @@ ReadPTLen (
   volatile UINT16  Index;\r
   UINT32  Mask;\r
 \r
+  //\r
+  // Read Extra Set Code Length Array size \r
+  //\r
   Number = (UINT16) GetBits (Sd, nbit);\r
 \r
   if (Number == 0) {\r
+    //\r
+    // This represents only Huffman code used\r
+    //\r
     CharC = (UINT16) GetBits (Sd, nbit);\r
 \r
     for (Index = 0; Index < 256; Index++) {\r
       Sd->mPTTable[Index] = CharC;\r
     }\r
 \r
-    for (Index = 0; Index < nn; Index++) {\r
-      Sd->mPTLen[Index] = 0;\r
-    }\r
+    SetMem (Sd->mPTLen, nn, 0);\r
 \r
     return 0;\r
   }\r
 \r
   Index = 0;\r
 \r
-  while (Index < Number) {\r
+  while (Index < Number && Index < NPT) {\r
 \r
     CharC = (UINT16) (Sd->mBitBuf >> (BITBUFSIZ - 3));\r
 \r
+    //\r
+    // If a code length is less than 7, then it is encoded as a 3-bit\r
+    // value. Or it is encoded as a series of "1"s followed by a \r
+    // terminating "0". The number of "1"s = Code length - 4.\r
+    //\r
     if (CharC == 7) {\r
       Mask = 1U << (BITBUFSIZ - 1 - 3);\r
       while (Mask & Sd->mBitBuf) {\r
@@ -323,23 +336,29 @@ ReadPTLen (
         CharC += 1;\r
       }\r
     }\r
-\r
+    \r
     FillBuf (Sd, (UINT16) ((CharC < 7) ? 3 : CharC - 3));\r
 \r
     Sd->mPTLen[Index++] = (UINT8) CharC;\r
-\r
\r
+    //\r
+    // For Code&Len Set, \r
+    // After the third length of the code length concatenation,\r
+    // a 2-bit value is used to indicated the number of consecutive \r
+    // zero lengths after the third length.\r
+    //\r
     if (Index == Special) {\r
       CharC = (UINT16) GetBits (Sd, 2);\r
-      while ((INT16) (--CharC) >= 0) {\r
+      while ((INT16) (--CharC) >= 0 && Index < NPT) {\r
         Sd->mPTLen[Index++] = 0;\r
       }\r
     }\r
   }\r
 \r
-  while (Index < nn) {\r
+  while (Index < nn && Index < NPT) {\r
     Sd->mPTLen[Index++] = 0;\r
   }\r
-\r
+  \r
   return MakeTable (Sd, nn, Sd->mPTLen, 8, Sd->mPTTable);\r
 }\r
 \r
@@ -365,11 +384,12 @@ ReadCLen (
   Number = (UINT16) GetBits (Sd, CBIT);\r
 \r
   if (Number == 0) {\r
+    //\r
+    // This represents only Huffman code used\r
+    //\r
     CharC = (UINT16) GetBits (Sd, CBIT);\r
 \r
-    for (Index = 0; Index < NC; Index++) {\r
-      Sd->mCLen[Index] = 0;\r
-    }\r
+    SetMem (Sd->mCLen, NC, 0);\r
 \r
     for (Index = 0; Index < 4096; Index++) {\r
       Sd->mCTable[Index] = CharC;\r
@@ -379,8 +399,7 @@ ReadCLen (
   }\r
 \r
   Index = 0;\r
-  while (Index < Number) {\r
-\r
+  while (Index < Number && Index < NC) {\r
     CharC = Sd->mPTTable[Sd->mBitBuf >> (BITBUFSIZ - 8)];\r
     if (CharC >= NT) {\r
       Mask = 1U << (BITBUFSIZ - 1 - 8);\r
@@ -412,7 +431,7 @@ ReadCLen (
         CharC = (UINT16) (GetBits (Sd, CBIT) + 20);\r
       }\r
 \r
-      while ((INT16) (--CharC) >= 0) {\r
+      while ((INT16) (--CharC) >= 0 && Index < NC) {\r
         Sd->mCLen[Index++] = 0;\r
       }\r
 \r
@@ -423,9 +442,7 @@ ReadCLen (
     }\r
   }\r
 \r
-  while (Index < NC) {\r
-    Sd->mCLen[Index++] = 0;\r
-  }\r
+  SetMem (Sd->mCLen + Index, NC - Index, 0);\r
 \r
   MakeTable (Sd, NC, Sd->mCLen, 12, Sd->mCTable);\r
 \r