]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. Update iSCSI UI to be more user-friendly.
authortye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 31 Aug 2011 12:00:09 +0000 (12:00 +0000)
committertye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 31 Aug 2011 12:00:09 +0000 (12:00 +0000)
2. Fix potential memory leak issue in IScsiConfig.c.

Signed-off-by: tye
Reviewed-by: xdu2
Reviewed-by: lgao4
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12245 6f19259b-4bc3-4df7-8a09-765794883524

NetworkPkg/IScsiDxe/IScsiConfig.c
NetworkPkg/IScsiDxe/IScsiConfigNVDataStruc.h
NetworkPkg/IScsiDxe/IScsiConfigStrings.uni
NetworkPkg/IScsiDxe/IScsiConfigVfr.vfr
NetworkPkg/IScsiDxe/IScsiDriver.h
NetworkPkg/IScsiDxe/IScsiMisc.c

index 3c299be94928354ce8c58ce3b3759f3d9b59bcb2..e6852a9b0ad319390681aa1c854f19976cccef2c 100644 (file)
@@ -421,15 +421,16 @@ IScsiConvertAttemptConfigDataToIfrNvData (
   AsciiStrToUnicodeStr (Attempt->AttemptName, IfrNvData->AttemptName);\r
 }\r
 \r
-\r
 /**\r
   Convert the IFR data to iSCSI configuration data.\r
 \r
-  @param[in]       IfrNvData              The IFR nv data.\r
+  @param[in]       IfrNvData              Point to ISCSI_CONFIG_IFR_NVDATA.\r
   @param[in, out]  Attempt                The iSCSI attempt config data.\r
 \r
   @retval EFI_INVALID_PARAMETER  Any input or configured parameter is invalid.\r
   @retval EFI_NOT_FOUND          Cannot find the corresponding variable.\r
+  @retval EFI_OUT_OF_RESOURCES   The operation is failed due to lack of resources.\r
+  @retval EFI_ABORTED            The operation is aborted.\r
   @retval EFI_SUCCESS            The operation is completed successfully.\r
 \r
 **/\r
@@ -451,6 +452,11 @@ IScsiConvertIfrNvDataToAttemptConfigData (
   CHAR16                      IpMode[64];\r
   ISCSI_NIC_INFO              *NicInfo;\r
   EFI_INPUT_KEY               Key;\r
+  UINT8                       *AttemptConfigOrder;\r
+  UINTN                       AttemptConfigOrderSize;\r
+  UINT8                       *AttemptOrderTmp;\r
+  UINTN                       TotalNumber;\r
+  EFI_STATUS                  Status;\r
 \r
   if (IfrNvData == NULL || Attempt == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -614,6 +620,61 @@ IScsiConvertIfrNvDataToAttemptConfigData (
     }\r
   }\r
 \r
+  //\r
+  // Update the iSCSI Mode data and record it in attempt help info.\r
+  //\r
+  Attempt->SessionConfigData.Enabled = IfrNvData->Enabled;\r
+  if (IfrNvData->Enabled == ISCSI_DISABLED) {\r
+    UnicodeSPrint (IScsiMode, 64, L"Disabled");\r
+  } else if (IfrNvData->Enabled == ISCSI_ENABLED) {\r
+    UnicodeSPrint (IScsiMode, 64, L"Enabled");\r
+  } else if (IfrNvData->Enabled == ISCSI_ENABLED_FOR_MPIO) {\r
+    UnicodeSPrint (IScsiMode, 64, L"Enabled for MPIO");\r
+  }\r
+\r
+  if (IfrNvData->IpMode == IP_MODE_IP4) {\r
+    UnicodeSPrint (IpMode, 64, L"IP4");\r
+  } else if (IfrNvData->IpMode == IP_MODE_IP6) {\r
+    UnicodeSPrint (IpMode, 64, L"IP6");\r
+  } else if (IfrNvData->IpMode == IP_MODE_AUTOCONFIG) {\r
+    UnicodeSPrint (IpMode, 64, L"Autoconfigure");\r
+  }\r
+\r
+  NicInfo = IScsiGetNicInfoByIndex (Attempt->NicIndex);\r
+  if (NicInfo == NULL) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
+  MacString = (CHAR16 *) AllocateZeroPool (ISCSI_MAX_MAC_STRING_LEN * sizeof (CHAR16));\r
+  if (MacString == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
+  AsciiStrToUnicodeStr (Attempt->MacString, MacString);\r
+\r
+  UnicodeSPrint (\r
+    mPrivate->PortString,\r
+    (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
+    L"MAC: %s, PFA: Bus %d | Dev %d | Func %d, iSCSI mode: %s, IP version: %s",\r
+    MacString,\r
+    NicInfo->BusNumber,\r
+    NicInfo->DeviceNumber,\r
+    NicInfo->FunctionNumber,\r
+    IScsiMode,\r
+    IpMode\r
+    );\r
+\r
+  Attempt->AttemptTitleHelpToken = HiiSetString (\r
+                                     mCallbackInfo->RegisteredHandle,\r
+                                     Attempt->AttemptTitleHelpToken,\r
+                                     mPrivate->PortString,\r
+                                     NULL\r
+                                     );\r
+  if (Attempt->AttemptTitleHelpToken == 0) {\r
+    FreePool (MacString);\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
   //\r
   // Check whether this attempt is an existing one.\r
   //\r
@@ -683,7 +744,70 @@ IScsiConvertIfrNvDataToAttemptConfigData (
       }\r
     }\r
 \r
-  } else if (ExistAttempt == NULL && IfrNvData->Enabled != ISCSI_DISABLED) {\r
+  } else if (ExistAttempt == NULL) {\r
+    //\r
+    // When a new attempt is created, pointer of the attempt is saved to\r
+    // mPrivate->NewAttempt, and also saved to mCallbackInfo->Current in\r
+    // IScsiConfigProcessDefault. If input Attempt does not match any existing\r
+    // attempt, it should be a new created attempt. Save it to system now.\r
+    //    \r
+    ASSERT (Attempt == mPrivate->NewAttempt);\r
+\r
+    //\r
+    // Save current order number for this attempt.\r
+    //\r
+    AttemptConfigOrder = IScsiGetVariableAndSize (\r
+                           L"AttemptOrder",\r
+                           &mVendorGuid,\r
+                           &AttemptConfigOrderSize\r
+                           );\r
+\r
+    TotalNumber = AttemptConfigOrderSize / sizeof (UINT8);\r
+    TotalNumber++;\r
+\r
+    //\r
+    // Append the new created attempt order to the end.\r
+    //\r
+    AttemptOrderTmp = AllocateZeroPool (TotalNumber * sizeof (UINT8));\r
+    if (AttemptOrderTmp == NULL) {\r
+      if (AttemptConfigOrder != NULL) {\r
+        FreePool (AttemptConfigOrder);\r
+      }\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+\r
+    if (AttemptConfigOrder != NULL) {\r
+      CopyMem (AttemptOrderTmp, AttemptConfigOrder, AttemptConfigOrderSize);\r
+      FreePool (AttemptConfigOrder);\r
+    }\r
+\r
+    AttemptOrderTmp[TotalNumber - 1] = Attempt->AttemptConfigIndex;\r
+    AttemptConfigOrder               = AttemptOrderTmp;\r
+    AttemptConfigOrderSize           = TotalNumber * sizeof (UINT8);\r
+\r
+    Status = gRT->SetVariable (\r
+                    L"AttemptOrder",\r
+                    &mVendorGuid,\r
+                    EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+                    AttemptConfigOrderSize,\r
+                    AttemptConfigOrder\r
+                    );\r
+    FreePool (AttemptConfigOrder);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
+\r
+    //\r
+    // Insert new created attempt to array.\r
+    //\r
+    InsertTailList (&mPrivate->AttemptConfigs, &Attempt->Link);\r
+    mPrivate->AttemptCount++;\r
+    //\r
+    // Reset mPrivate->NewAttempt to NULL, which indicates none attempt is created\r
+    // but not saved now.\r
+    //\r
+    mPrivate->NewAttempt = NULL;\r
+\r
     if (IfrNvData->Enabled == ISCSI_ENABLED_FOR_MPIO) {\r
       //\r
       // This new Attempt is enabled for MPIO; enable the multipath mode.\r
@@ -693,61 +817,8 @@ IScsiConvertIfrNvDataToAttemptConfigData (
     } else if (IfrNvData->Enabled == ISCSI_ENABLED) {\r
       mPrivate->SinglePathCount++;\r
     }\r
-  }\r
-\r
-  //\r
-  // Update the iSCSI Mode data and record it in attempt help info.\r
-  //\r
-  Attempt->SessionConfigData.Enabled = IfrNvData->Enabled;\r
-  if (IfrNvData->Enabled == ISCSI_DISABLED) {\r
-    UnicodeSPrint (IScsiMode, 64, L"Disabled");\r
-  } else if (IfrNvData->Enabled == ISCSI_ENABLED) {\r
-    UnicodeSPrint (IScsiMode, 64, L"Enabled");\r
-  } else if (IfrNvData->Enabled == ISCSI_ENABLED_FOR_MPIO) {\r
-    UnicodeSPrint (IScsiMode, 64, L"Enabled for MPIO");\r
-  }\r
 \r
-  if (IfrNvData->IpMode == IP_MODE_IP4) {\r
-    UnicodeSPrint (IpMode, 64, L"IP4");\r
-  } else if (IfrNvData->IpMode == IP_MODE_IP6) {\r
-    UnicodeSPrint (IpMode, 64, L"IP6");\r
-  } else if (IfrNvData->IpMode == IP_MODE_AUTOCONFIG) {\r
-    UnicodeSPrint (IpMode, 64, L"Autoconfigure");\r
-  }\r
-\r
-  NicInfo = IScsiGetNicInfoByIndex (Attempt->NicIndex);\r
-  if (NicInfo == NULL) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  MacString = (CHAR16 *) AllocateZeroPool (ISCSI_MAX_MAC_STRING_LEN * sizeof (CHAR16));\r
-  if (MacString == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  AsciiStrToUnicodeStr (Attempt->MacString, MacString);\r
-\r
-  UnicodeSPrint (\r
-    mPrivate->PortString,\r
-    (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
-    L"MAC: %s, PFA: Bus %d | Dev %d | Func %d, iSCSI mode: %s, IP version: %s",\r
-    MacString,\r
-    NicInfo->BusNumber,\r
-    NicInfo->DeviceNumber,\r
-    NicInfo->FunctionNumber,\r
-    IScsiMode,\r
-    IpMode\r
-    );\r
-\r
-  Attempt->AttemptTitleHelpToken = HiiSetString (\r
-                                     mCallbackInfo->RegisteredHandle,\r
-                                     Attempt->AttemptTitleHelpToken,\r
-                                     mPrivate->PortString,\r
-                                     NULL\r
-                                     );\r
-  if (Attempt->AttemptTitleHelpToken == 0) {\r
-    FreePool (MacString);\r
-    return EFI_OUT_OF_RESOURCES;\r
+    IScsiConfigUpdateAttempt ();\r
   }\r
 \r
   //\r
@@ -919,7 +990,7 @@ IScsiConfigAddAttempt (
       MacString\r
       );\r
 \r
-    UnicodeSPrint (mPrivate->PortString, (UINTN) ISCSI_NAME_IFR_MAX_SIZE, L"Port %s", MacString);\r
+    UnicodeSPrint (mPrivate->PortString, (UINTN) ISCSI_NAME_IFR_MAX_SIZE, L"MAC %s", MacString);\r
     PortTitleToken = HiiSetString (\r
                        mCallbackInfo->RegisteredHandle,\r
                        0,\r
@@ -1081,7 +1152,8 @@ IScsiConfigDeleteAttempts (
 \r
   AttemptNewOrder = AllocateZeroPool (AttemptConfigOrderSize);\r
   if (AttemptNewOrder == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Error;\r
   }\r
 \r
   Total    = AttemptConfigOrderSize / sizeof (UINT8);\r
@@ -1193,8 +1265,13 @@ IScsiConfigDeleteAttempts (
                   );\r
 \r
 Error:\r
-  FreePool (AttemptConfigOrder);\r
-  FreePool (AttemptNewOrder);\r
+  if (AttemptConfigOrder != NULL) {\r
+    FreePool (AttemptConfigOrder);\r
+  }\r
+\r
+  if (AttemptNewOrder != NULL) {\r
+    FreePool (AttemptNewOrder);\r
+  }\r
   \r
   return Status;\r
 }\r
@@ -1530,10 +1607,19 @@ IScsiConfigProcessDefault (
   UINT8                       *AttemptConfigOrder;\r
   UINTN                       AttemptConfigOrderSize;\r
   UINTN                       TotalNumber;\r
-  UINT8                       *AttemptOrderTmp;\r
   UINTN                       Index;\r
-  EFI_STATUS                  Status;\r
 \r
+  //\r
+  // Free any attempt that is previously created but not saved to system.\r
+  //\r
+  if (mPrivate->NewAttempt != NULL) {\r
+    FreePool (mPrivate->NewAttempt);\r
+    mPrivate->NewAttempt = NULL;\r
+  }\r
+\r
+  //\r
+  // Is User creating a new attempt?\r
+  //\r
   NewAttempt = FALSE;\r
 \r
   if ((KeyValue >= KEY_MAC_ENTRY_BASE) &&\r
@@ -1567,7 +1653,7 @@ IScsiConfigProcessDefault (
     }\r
     \r
     //\r
-    // Create the new attempt and save to NVR.\r
+    // Create new attempt.\r
     //\r
 \r
     AttemptConfigData = AllocateZeroPool (sizeof (ISCSI_ATTEMPT_CONFIG_NVDATA));\r
@@ -1613,46 +1699,14 @@ IScsiConfigProcessDefault (
     TotalNumber++;\r
 \r
     //\r
-    // Append the new created attempt order to the end.\r
+    // Record the mapping between attempt order and attempt's configdata.\r
     //\r
-    AttemptOrderTmp = AllocateZeroPool (TotalNumber * sizeof (UINT8));\r
-    if (AttemptOrderTmp == NULL) {\r
-      FreePool (AttemptConfigData);\r
-      if (AttemptConfigOrder != NULL) {\r
-        FreePool (AttemptConfigOrder);\r
-      }\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
+    AttemptConfigData->AttemptConfigIndex  = CurrentAttemptConfigIndex;\r
 \r
     if (AttemptConfigOrder != NULL) {\r
-      CopyMem (AttemptOrderTmp, AttemptConfigOrder, AttemptConfigOrderSize);\r
-      FreePool (AttemptConfigOrder);      \r
-    }\r
-\r
-    AttemptOrderTmp[TotalNumber - 1] = CurrentAttemptConfigIndex;    \r
-    AttemptConfigOrder               = AttemptOrderTmp;\r
-    AttemptConfigOrderSize           = TotalNumber * sizeof (UINT8);\r
-\r
-    Status = gRT->SetVariable (\r
-                    L"AttemptOrder",\r
-                    &mVendorGuid,\r
-                    EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
-                    AttemptConfigOrderSize,\r
-                    AttemptConfigOrder\r
-                    );\r
-    FreePool (AttemptConfigOrder);\r
-    if (EFI_ERROR (Status)) {\r
-      FreePool (AttemptConfigData);\r
-      return Status;\r
+      FreePool (AttemptConfigOrder);\r
     }\r
 \r
-    //\r
-    // Record the mapping between attempt order and attempt's configdata.\r
-    //\r
-    AttemptConfigData->AttemptConfigIndex  = CurrentAttemptConfigIndex;\r
-    InsertTailList (&mPrivate->AttemptConfigs, &AttemptConfigData->Link);\r
-    mPrivate->AttemptCount++;\r
-\r
     //\r
     // Record the MAC info in Config Data.\r
     //\r
@@ -1708,6 +1762,13 @@ IScsiConfigProcessDefault (
       );\r
     UnicodeStrToAsciiStr (mPrivate->PortString, AttemptConfigData->AttemptName);\r
 \r
+    //\r
+    // Save the created Attempt temporarily. If user does not save the attempt\r
+    // by press 'KEY_SAVE_ATTEMPT_CONFIG' later, iSCSI driver would know that\r
+    // and free resources.\r
+    //\r
+    mPrivate->NewAttempt = (VOID *) AttemptConfigData;\r
+\r
   } else {\r
     //\r
     // Determine which Attempt user has selected to configure.\r
@@ -1734,10 +1795,11 @@ IScsiConfigProcessDefault (
   \r
   IScsiConvertAttemptConfigDataToIfrNvData (AttemptConfigData, IfrNvData);\r
 \r
+  //\r
+  // Update current attempt to be a new created attempt or an existing attempt.\r
+  //\r
   mCallbackInfo->Current = AttemptConfigData;\r
 \r
-  IScsiConfigUpdateAttempt ();\r
-\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -2496,6 +2558,13 @@ IScsiConfigFormUnload (
 \r
   ASSERT (mPrivate->NicCount == 0);\r
 \r
+  //\r
+  // Free attempt is created but not saved to system.\r
+  //\r
+  if (mPrivate->NewAttempt != NULL) {\r
+    FreePool (mPrivate->NewAttempt);\r
+  }\r
+\r
   FreePool (mPrivate);\r
   mPrivate = NULL;\r
 \r
index 211b4ab03438be910322ef0c14207c5f3b90fe9b..ee66e2aae0204b4620494180820e923f80828017 100644 (file)
@@ -102,12 +102,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define KEY_IGNORE_DELETE_ATTEMPT 0x115\r
 #define KEY_DELETE_ATTEMPT        0x116\r
 \r
-#define KEY_KERBEROS_USER_NAME    0x117\r
-#define KEY_KERBEROS_USER_SECRET  0x118\r
-#define KEY_KERBEROS_KDC_NAME     0x119\r
-#define KEY_KERBEROS_KDC_REALM    0x11a\r
-#define KEY_KERBEROS_KDC_IP_ADDR  0x11b\r
-\r
 #define KEY_IP_MODE               0x11c\r
 #define KEY_AUTH_TYPE             0x11d\r
 #define KEY_CONFIG_ISID           0x11e\r
index 8df9cef13e70e7fcb0bcab112e65be6b284f8401..57ef9c8d776e28ed9a602a47e4852a6b4b9d77ef 100644 (file)
Binary files a/NetworkPkg/IScsiDxe/IScsiConfigStrings.uni and b/NetworkPkg/IScsiDxe/IScsiConfigStrings.uni differ
index 94b00ee60d4586b5bdcaf4afd9b6ca81875f7d4e..0cf4ffeed98eefa4430ea853832dc0344c7ca345 100644 (file)
@@ -346,75 +346,11 @@ formset
 \r
     endif;\r
 \r
-    suppressif NOT ideqval ISCSI_CONFIG_IFR_NVDATA.AuthenticationType == ISCSI_AUTH_TYPE_KRB;\r
-\r
-    checkbox varid = ISCSI_CONFIG_IFR_NVDATA.MutualRequired,\r
-            prompt = STRING_TOKEN(STR_ISCSI_MUTUAL_REQUIRED),\r
-            help   = STRING_TOKEN(STR_ISCSI_MUTUAL_REQUIRED_HELP),\r
-            flags  = 0,\r
-    endcheckbox;\r
-    \r
-    string  varid   = ISCSI_CONFIG_IFR_NVDATA.KerberosUserName,\r
-            prompt  = STRING_TOKEN(STR_ISCSI_KERBEROS_USER_NAME),\r
-            help    = STRING_TOKEN(STR_ISCSI_KERBEROS_USER_NAME),\r
-            flags   = INTERACTIVE,\r
-            key     = KEY_KERBEROS_USER_NAME,\r
-            minsize = 0,\r
-            maxsize = KERBEROS_NAME_MAX_LEN,\r
-    endstring;\r
-\r
-    string  varid    = ISCSI_CONFIG_IFR_NVDATA.KerberosUserSecret,\r
-            prompt   = STRING_TOKEN(STR_ISCSI_KERBEROS_USER_SECRET),\r
-            help     = STRING_TOKEN(STR_ISCSI_KERBEROS_USER_SECRET),\r
-            flags    = INTERACTIVE,\r
-            key      = KEY_KERBEROS_USER_SECRET,\r
-            minsize  = KERBEROS_SECRET_MIN_LEN,\r
-            maxsize  = KERBEROS_SECRET_MAX_LEN,\r
-    endstring;\r
-    \r
-    string  varid   = ISCSI_CONFIG_IFR_NVDATA.KerberosKDCName,\r
-            prompt  = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_NAME),\r
-            help    = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_NAME),\r
-            flags   = INTERACTIVE,\r
-            key     = KEY_KERBEROS_KDC_NAME,\r
-            minsize = 0,\r
-            maxsize = KERBEROS_NAME_MAX_LEN,\r
-    endstring;\r
-\r
-    string  varid    = ISCSI_CONFIG_IFR_NVDATA.KerberosKDCRealm,\r
-            prompt   = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_REALM),\r
-            help     = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_REALM),\r
-            flags    = INTERACTIVE,\r
-            key      = KEY_KERBEROS_KDC_REALM,\r
-            minsize  = 0,\r
-            maxsize  = KERBEROS_NAME_MAX_LEN,\r
-    endstring;\r
-\r
-    string  varid   = ISCSI_CONFIG_IFR_NVDATA.KerberosKDCIp,\r
-            prompt  = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_IP),\r
-            help    = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_IP),\r
-            flags   = INTERACTIVE,\r
-            key     = KEY_KERBEROS_KDC_IP_ADDR,\r
-            minsize = IP_MIN_SIZE,\r
-            maxsize = IP_MAX_SIZE,\r
-    endstring;\r
-\r
-    numeric varid   = ISCSI_CONFIG_IFR_NVDATA.KerberosKDCPort,\r
-            prompt  = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_PORT),\r
-            help    = STRING_TOKEN(STR_ISCSI_KERBEROS_KDC_PORT),\r
-            flags   = 0,\r
-            minimum = KERBEROS_KDC_PORT_MIN_NUM,\r
-            maximum = KERBEROS_KDC_PORT_MAX_NUM,\r
-            step    = 0,\r
-    endnumeric;\r
-    \r
-    endif;\r
-\r
     subtitle text = STRING_TOKEN(STR_NULL);\r
 \r
     goto FORMID_ATTEMPT_FORM,\r
     prompt = STRING_TOKEN (STR_SAVE_CHANGES),\r
-    help   = STRING_TOKEN (STR_SAVE_CHANGES),\r
+    help   = STRING_TOKEN (STR_SAVE_CHANGES_HELP),\r
     flags  = INTERACTIVE,\r
     key    = KEY_SAVE_ATTEMPT_CONFIG;\r
 \r
index ad6b83a3c3553fec02de7dcd7819afc48a6625ce..04866f0ed480dcb7f850466ea93f6736c7cc24f1 100644 (file)
@@ -55,6 +55,7 @@ typedef struct {
   LIST_ENTRY      AttemptConfigs;       // User configured Attempt list.\r
   CHAR8           InitiatorName[ISCSI_NAME_MAX_SIZE];\r
   UINTN           InitiatorNameLength;\r
+  VOID            *NewAttempt;          // Attempt is created but not saved.\r
 } ISCSI_PRIVATE_DATA;\r
 \r
 extern ISCSI_PRIVATE_DATA                 *mPrivate;\r
index a697659f49e9805d8b708e5c1cbfd4c3ee1753cf..2cf3db01b710abbc5997d7a68245dca2cd4e6219 100644 (file)
@@ -297,7 +297,7 @@ IScsiMacAddrToStr (
   for (Index = 0; Index < Len; Index++) {\r
     Str[3 * Index]      = (CHAR16) IScsiHexString[(Mac->Addr[Index] >> 4) & 0x0F];\r
     Str[3 * Index + 1]  = (CHAR16) IScsiHexString[Mac->Addr[Index] & 0x0F];\r
-    Str[3 * Index + 2]  = L'-';\r
+    Str[3 * Index + 2]  = L':';\r
   }\r
 \r
   String = &Str[3 * Index - 1] ;\r
@@ -640,6 +640,14 @@ IScsiRemoveNic (
     }\r
   }\r
 \r
+  //\r
+  // Free attempt is created but not saved to system.\r
+  //\r
+  if (mPrivate->NewAttempt != NULL) {\r
+    FreePool (mPrivate->NewAttempt);\r
+    mPrivate->NewAttempt = NULL;\r
+  }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r