]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IScsiDxe/IScsiConfig.c
NetworkPkg: Add check logic for some variable in iSCSI driver.
[mirror_edk2.git] / NetworkPkg / IScsiDxe / IScsiConfig.c
index b1696205c4dbff9c29ffe191f68ee238d5502817..1fe279e96b516166e5af9bce6ac7362513749f10 100644 (file)
@@ -630,112 +630,119 @@ IScsiConvertAttemptConfigDataToIfrNvDataByKeyword (
   CHAR16                        AttemptNameList[ATTEMPT_NAME_LIST_SIZE];\r
   EFI_IP_ADDRESS                Ip;\r
   UINTN                         Index;\r
+  UINTN                         StringLen;\r
 \r
   ZeroMem (AttemptNameList, sizeof (AttemptNameList));\r
 \r
-  NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {\r
-    Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);\r
-    //\r
-    // Normal session configuration parameters.\r
-    //\r
-    SessionConfigData                 = &Attempt->SessionConfigData;\r
-\r
-    Index   = Attempt->AttemptConfigIndex - 1;\r
+  if ((mPrivate != NULL) && (mPrivate->AttemptCount != 0)) {\r
+    NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {\r
+      Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);\r
+      //\r
+      // Normal session configuration parameters.\r
+      //\r
+      SessionConfigData                 = &Attempt->SessionConfigData;\r
 \r
-    //\r
-    // Save the attempt to AttemptNameList as Attempt:1 Attempt:2\r
-    //\r
-    AsciiStrToUnicodeStrS (\r
-      Attempt->AttemptName,\r
-      AttemptNameList + StrLen (AttemptNameList),\r
-      ATTEMPT_NAME_LIST_SIZE\r
-    );\r
-    *(AttemptNameList + StrLen (AttemptNameList) - 2) = L':';\r
-    *(AttemptNameList + StrLen (AttemptNameList))     = L' ';\r
+      ASSERT ((Attempt->AttemptConfigIndex > 0) && (Attempt->AttemptConfigIndex <= FixedPcdGet8 (PcdMaxIScsiAttemptNumber)));\r
+      Index   = Attempt->AttemptConfigIndex - 1;\r
 \r
-    AsciiStrToUnicodeStrS (\r
-      Attempt->AttemptName,\r
-      IfrNvData->ISCSIAttemptName  + ATTEMPT_NAME_SIZE * Index,\r
-      ATTEMPT_NAME_SIZE\r
-    );\r
+      //\r
+      // Save the attempt to AttemptNameList as Attempt:1 Attempt:2\r
+      //\r
+      AsciiStrToUnicodeStrS (\r
+        Attempt->AttemptName,\r
+        AttemptNameList + StrLen (AttemptNameList),\r
+        ATTEMPT_NAME_LIST_SIZE - StrLen (AttemptNameList)\r
+      );\r
 \r
-    IfrNvData->ISCSIBootEnableList[Index]          = SessionConfigData->Enabled;\r
-    IfrNvData->ISCSIIpAddressTypeList[Index]       = SessionConfigData->IpMode;\r
+      StringLen = StrLen (AttemptNameList);\r
+      ASSERT (StringLen > 2);\r
+      *(AttemptNameList + StringLen - 2) = L':';\r
+      *(AttemptNameList + StringLen)     = L' ';\r
 \r
-    IfrNvData->ISCSIInitiatorInfoViaDHCP[Index]    = SessionConfigData->InitiatorInfoFromDhcp;\r
-    IfrNvData->ISCSITargetInfoViaDHCP[Index]       = SessionConfigData->TargetInfoFromDhcp;\r
-    IfrNvData->ISCSIConnectRetry[Index]            = SessionConfigData->ConnectRetryCount;\r
-    IfrNvData->ISCSIConnectTimeout[Index]          = SessionConfigData->ConnectTimeout;\r
-    IfrNvData->ISCSITargetTcpPort[Index]           = SessionConfigData->TargetPort;\r
+      AsciiStrToUnicodeStrS (\r
+        Attempt->AttemptName,\r
+        IfrNvData->ISCSIAttemptName  + ATTEMPT_NAME_SIZE * Index,\r
+        ATTEMPT_NAME_LIST_SIZE - ATTEMPT_NAME_SIZE * Index\r
+      );\r
 \r
-    if (SessionConfigData->IpMode == IP_MODE_IP4) {\r
-      CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));\r
-      IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);\r
-      CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
-      IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);\r
-      CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));\r
-      IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);\r
-      if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {\r
-        CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));\r
-        IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
-      }\r
-    } else if (SessionConfigData->IpMode == IP_MODE_IP6) {\r
-      ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));\r
-      if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {\r
-        IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);\r
-        IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
+      IfrNvData->ISCSIBootEnableList[Index]          = SessionConfigData->Enabled;\r
+      IfrNvData->ISCSIIpAddressTypeList[Index]       = SessionConfigData->IpMode;\r
+\r
+      IfrNvData->ISCSIInitiatorInfoViaDHCP[Index]    = SessionConfigData->InitiatorInfoFromDhcp;\r
+      IfrNvData->ISCSITargetInfoViaDHCP[Index]       = SessionConfigData->TargetInfoFromDhcp;\r
+      IfrNvData->ISCSIConnectRetry[Index]            = SessionConfigData->ConnectRetryCount;\r
+      IfrNvData->ISCSIConnectTimeout[Index]          = SessionConfigData->ConnectTimeout;\r
+      IfrNvData->ISCSITargetTcpPort[Index]           = SessionConfigData->TargetPort;\r
+\r
+      if (SessionConfigData->IpMode == IP_MODE_IP4) {\r
+        CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));\r
+        IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);\r
+        CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+        IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);\r
+        CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));\r
+        IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);\r
+        if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {\r
+          CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));\r
+          IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
+        }\r
+      } else if (SessionConfigData->IpMode == IP_MODE_IP6) {\r
+        ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));\r
+        if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {\r
+          IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);\r
+          IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
+        }\r
       }\r
-    }\r
 \r
-    AsciiStrToUnicodeStrS (\r
-      SessionConfigData->TargetName,\r
-      IfrNvData->Keyword[Index].ISCSITargetName,\r
-      ISCSI_NAME_MAX_SIZE\r
-      );\r
-\r
-    if (SessionConfigData->DnsMode) {\r
       AsciiStrToUnicodeStrS (\r
-        SessionConfigData->TargetUrl,\r
-        IfrNvData->TargetIp,\r
-        sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])\r
+        SessionConfigData->TargetName,\r
+        IfrNvData->Keyword[Index].ISCSITargetName,\r
+        ISCSI_NAME_MAX_SIZE\r
         );\r
-    }\r
 \r
-    IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);\r
-    IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);\r
+      if (SessionConfigData->DnsMode) {\r
+        AsciiStrToUnicodeStrS (\r
+          SessionConfigData->TargetUrl,\r
+          IfrNvData->TargetIp,\r
+          sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])\r
+          );\r
+      }\r
 \r
-    IfrNvData->ISCSIAuthenticationMethod[Index]    = Attempt->AuthenticationType;\r
+      IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);\r
+      IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);\r
 \r
-    if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
-      AuthConfigData      = &Attempt->AuthConfigData.CHAP;\r
-      IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;\r
-      AsciiStrToUnicodeStrS (\r
-        AuthConfigData->CHAPName,\r
-        IfrNvData->Keyword[Index].ISCSIChapUsername,\r
-        ISCSI_CHAP_NAME_STORAGE\r
-        );\r
+      IfrNvData->ISCSIAuthenticationMethod[Index]    = Attempt->AuthenticationType;\r
 \r
-      AsciiStrToUnicodeStrS (\r
-        AuthConfigData->CHAPSecret,\r
-        IfrNvData->Keyword[Index].ISCSIChapSecret,\r
-        ISCSI_CHAP_SECRET_STORAGE\r
-        );\r
+      if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
+        AuthConfigData      = &Attempt->AuthConfigData.CHAP;\r
+        IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;\r
+        AsciiStrToUnicodeStrS (\r
+          AuthConfigData->CHAPName,\r
+          IfrNvData->Keyword[Index].ISCSIChapUsername,\r
+          ISCSI_CHAP_NAME_STORAGE\r
+          );\r
 \r
-      AsciiStrToUnicodeStrS (\r
-        AuthConfigData->ReverseCHAPName,\r
-        IfrNvData->Keyword[Index].ISCSIReverseChapUsername,\r
-        ISCSI_CHAP_NAME_STORAGE\r
-        );\r
+        AsciiStrToUnicodeStrS (\r
+          AuthConfigData->CHAPSecret,\r
+          IfrNvData->Keyword[Index].ISCSIChapSecret,\r
+          ISCSI_CHAP_SECRET_STORAGE\r
+          );\r
 \r
-      AsciiStrToUnicodeStrS (\r
-        AuthConfigData->ReverseCHAPSecret,\r
-        IfrNvData->Keyword[Index].ISCSIReverseChapSecret,\r
-        ISCSI_CHAP_SECRET_STORAGE\r
-        );\r
+        AsciiStrToUnicodeStrS (\r
+          AuthConfigData->ReverseCHAPName,\r
+          IfrNvData->Keyword[Index].ISCSIReverseChapUsername,\r
+          ISCSI_CHAP_NAME_STORAGE\r
+          );\r
+\r
+        AsciiStrToUnicodeStrS (\r
+          AuthConfigData->ReverseCHAPSecret,\r
+          IfrNvData->Keyword[Index].ISCSIReverseChapSecret,\r
+          ISCSI_CHAP_SECRET_STORAGE\r
+          );\r
+      }\r
     }\r
-  }\r
 \r
-  CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);\r
+    CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);\r
+  }\r
 }\r
 \r
 /**\r
@@ -1201,6 +1208,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
   UINT64                           Lun;\r
   EFI_STATUS                       Status;\r
 \r
+  Attempt = NULL;\r
   ZeroMem (IScsiName, sizeof (IScsiName));\r
 \r
   if (OffSet < ATTEMPT_BOOTENABLE_VAR_OFFSET) {\r
@@ -1728,7 +1736,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
   //\r
   // Record the user configuration information in NVR.\r
   //\r
-\r
+  ASSERT (Attempt != NULL);\r
   UnicodeSPrint (mPrivate->PortString, (UINTN) ISCSI_NAME_IFR_MAX_SIZE, L"Attempt %d", Attempt->AttemptConfigIndex);\r
   return gRT->SetVariable (\r
                 mPrivate->PortString,\r
@@ -2707,6 +2715,7 @@ IScsiConfigProcessDefault (
   UINTN                       Index;\r
   EFI_INPUT_KEY               Key;\r
 \r
+  AttemptConfigData = NULL;\r
   //\r
   // Is User creating a new attempt?\r
   //\r
@@ -2751,37 +2760,38 @@ IScsiConfigProcessDefault (
                            &AttemptConfigOrderSize\r
                            );\r
 \r
-    if (AttemptConfigOrder != NULL) {\r
-\r
-      for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {\r
-        UnicodeSPrint (\r
-          mPrivate->PortString,\r
-          (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
-          L"Attempt %d",\r
-          (UINTN) AttemptConfigOrder[Index]\r
-          );\r
-        GetVariable2 (\r
-                     mPrivate->PortString,\r
-                     &gEfiIScsiInitiatorNameProtocolGuid,\r
-                     (VOID**)&AttemptConfigData,\r
-                     NULL\r
-                     );\r
-        if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {\r
-          continue;\r
-        }\r
-\r
-        break;\r
-      }\r
+    if (AttemptConfigOrder == NULL) {\r
+      return EFI_NOT_FOUND;\r
+    }\r
 \r
-      if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {\r
-        CreatePopUp (\r
-          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-          &Key,\r
-          L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",\r
-          NULL\r
-          );\r
-        return EFI_UNSUPPORTED;\r
+    for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {\r
+      UnicodeSPrint (\r
+        mPrivate->PortString,\r
+        (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
+        L"Attempt %d",\r
+        (UINTN) AttemptConfigOrder[Index]\r
+        );\r
+      GetVariable2 (\r
+                   mPrivate->PortString,\r
+                   &gEfiIScsiInitiatorNameProtocolGuid,\r
+                   (VOID**)&AttemptConfigData,\r
+                   NULL\r
+                   );\r
+      if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {\r
+        continue;\r
       }\r
+    \r
+      break;\r
+    }\r
+    \r
+    if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {\r
+      CreatePopUp (\r
+        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+        &Key,\r
+        L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",\r
+        NULL\r
+        );\r
+      return EFI_UNSUPPORTED;\r
     }\r
 \r
     if (AttemptConfigOrder != NULL) {\r
@@ -2798,6 +2808,7 @@ IScsiConfigProcessDefault (
       MacString\r
       );\r
 \r
+    ASSERT (AttemptConfigData != NULL);\r
     UnicodeStrToAsciiStrS (MacString, AttemptConfigData->MacString, sizeof (AttemptConfigData->MacString));\r
     AttemptConfigData->NicIndex = NicIndex;\r
     AttemptConfigData->Actived = ISCSI_ACTIVE_ENABLED;\r
@@ -3128,6 +3139,7 @@ IScsiFormRouteConfig (
   Index2  = 0;\r
   NicInfo = NULL;\r
   AttemptList = NULL;\r
+  Status = EFI_SUCCESS;\r
 \r
   if (This == NULL || Configuration == NULL || Progress == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -3184,14 +3196,23 @@ IScsiFormRouteConfig (
       goto Exit;\r
     }\r
   } else {\r
-    Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);\r
+    Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);\r
     if (EFI_ERROR (Status)) {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &Key,\r
-        L"Error: please configure iSCSI initiator name first!",\r
-        NULL\r
-        );\r
+      goto Exit;\r
+    }\r
+\r
+    if (OffSet >= ATTEMPT_MAC_ADDR_VAR_OFFSET) {\r
+      Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);\r
+      if (EFI_ERROR (Status)) {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &Key,\r
+          L"Error: please configure iSCSI initiator name first!",\r
+          NULL\r
+          );\r
+        goto Exit;\r
+      }\r
+    } else {\r
       goto Exit;\r
     }\r
 \r
@@ -3290,10 +3311,6 @@ IScsiFormRouteConfig (
       }\r
 \r
     } else {\r
-      Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);\r
-      if (EFI_ERROR (Status)) {\r
-        goto Exit;\r
-      }\r
       Status = IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (IfrNvData, OffSet);\r
       if (EFI_ERROR (Status)) {\r
         goto Exit;\r
@@ -3303,8 +3320,6 @@ IScsiFormRouteConfig (
 \r
   IScsiConfigUpdateAttempt ();\r
 \r
-  Status = EFI_SUCCESS;\r
-\r
 Exit:\r
   if (InitiatorName != NULL) {\r
     FreePool (InitiatorName);\r