summaryrefslogtreecommitdiffstats
path: root/NetworkPkg/IScsiDxe/IScsiConfig.c
diff options
context:
space:
mode:
authorZhang Lubo <lubo.zhang@intel.com>2017-02-27 14:46:59 +0800
committerJiaxin Wu <jiaxin.wu@intel.com>2017-03-01 15:40:11 +0800
commit2fd40fa58f6c6c2157b632dec0b8a60027386b06 (patch)
tree2b311b71df7b307cefac70b49a5ee258726221a7 /NetworkPkg/IScsiDxe/IScsiConfig.c
parente4408576df907721e87a2b439087a54790dcad46 (diff)
downloadedk2-2fd40fa58f6c6c2157b632dec0b8a60027386b06.tar.gz
edk2-2fd40fa58f6c6c2157b632dec0b8a60027386b06.tar.bz2
edk2-2fd40fa58f6c6c2157b632dec0b8a60027386b06.zip
NetworkPkg: Add check logic for some variable in iSCSI driver.
v2: need to check the global variable mPrivate before using it in the Convert AttemptConfigData To IfrNvData by Keyword function. Add check logic for some attempt variable to enhance code in iSCSI. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Wu Jiaxin <jiaxin.wu@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
Diffstat (limited to 'NetworkPkg/IScsiDxe/IScsiConfig.c')
-rw-r--r--NetworkPkg/IScsiDxe/IScsiConfig.c273
1 files changed, 144 insertions, 129 deletions
diff --git a/NetworkPkg/IScsiDxe/IScsiConfig.c b/NetworkPkg/IScsiDxe/IScsiConfig.c
index b1696205c4..1fe279e96b 100644
--- a/NetworkPkg/IScsiDxe/IScsiConfig.c
+++ b/NetworkPkg/IScsiDxe/IScsiConfig.c
@@ -630,112 +630,119 @@ IScsiConvertAttemptConfigDataToIfrNvDataByKeyword (
CHAR16 AttemptNameList[ATTEMPT_NAME_LIST_SIZE];
EFI_IP_ADDRESS Ip;
UINTN Index;
+ UINTN StringLen;
ZeroMem (AttemptNameList, sizeof (AttemptNameList));
- NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {
- Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);
- //
- // Normal session configuration parameters.
- //
- SessionConfigData = &Attempt->SessionConfigData;
-
- Index = Attempt->AttemptConfigIndex - 1;
+ if ((mPrivate != NULL) && (mPrivate->AttemptCount != 0)) {
+ NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {
+ Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);
+ //
+ // Normal session configuration parameters.
+ //
+ SessionConfigData = &Attempt->SessionConfigData;
- //
- // Save the attempt to AttemptNameList as Attempt:1 Attempt:2
- //
- AsciiStrToUnicodeStrS (
- Attempt->AttemptName,
- AttemptNameList + StrLen (AttemptNameList),
- ATTEMPT_NAME_LIST_SIZE
- );
- *(AttemptNameList + StrLen (AttemptNameList) - 2) = L':';
- *(AttemptNameList + StrLen (AttemptNameList)) = L' ';
+ ASSERT ((Attempt->AttemptConfigIndex > 0) && (Attempt->AttemptConfigIndex <= FixedPcdGet8 (PcdMaxIScsiAttemptNumber)));
+ Index = Attempt->AttemptConfigIndex - 1;
- AsciiStrToUnicodeStrS (
- Attempt->AttemptName,
- IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,
- ATTEMPT_NAME_SIZE
- );
+ //
+ // Save the attempt to AttemptNameList as Attempt:1 Attempt:2
+ //
+ AsciiStrToUnicodeStrS (
+ Attempt->AttemptName,
+ AttemptNameList + StrLen (AttemptNameList),
+ ATTEMPT_NAME_LIST_SIZE - StrLen (AttemptNameList)
+ );
- IfrNvData->ISCSIBootEnableList[Index] = SessionConfigData->Enabled;
- IfrNvData->ISCSIIpAddressTypeList[Index] = SessionConfigData->IpMode;
+ StringLen = StrLen (AttemptNameList);
+ ASSERT (StringLen > 2);
+ *(AttemptNameList + StringLen - 2) = L':';
+ *(AttemptNameList + StringLen) = L' ';
- IfrNvData->ISCSIInitiatorInfoViaDHCP[Index] = SessionConfigData->InitiatorInfoFromDhcp;
- IfrNvData->ISCSITargetInfoViaDHCP[Index] = SessionConfigData->TargetInfoFromDhcp;
- IfrNvData->ISCSIConnectRetry[Index] = SessionConfigData->ConnectRetryCount;
- IfrNvData->ISCSIConnectTimeout[Index] = SessionConfigData->ConnectTimeout;
- IfrNvData->ISCSITargetTcpPort[Index] = SessionConfigData->TargetPort;
+ AsciiStrToUnicodeStrS (
+ Attempt->AttemptName,
+ IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,
+ ATTEMPT_NAME_LIST_SIZE - ATTEMPT_NAME_SIZE * Index
+ );
- if (SessionConfigData->IpMode == IP_MODE_IP4) {
- CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);
- CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);
- CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);
- if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {
- CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
- }
- } else if (SessionConfigData->IpMode == IP_MODE_IP6) {
- ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));
- if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {
- IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);
- IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
+ IfrNvData->ISCSIBootEnableList[Index] = SessionConfigData->Enabled;
+ IfrNvData->ISCSIIpAddressTypeList[Index] = SessionConfigData->IpMode;
+
+ IfrNvData->ISCSIInitiatorInfoViaDHCP[Index] = SessionConfigData->InitiatorInfoFromDhcp;
+ IfrNvData->ISCSITargetInfoViaDHCP[Index] = SessionConfigData->TargetInfoFromDhcp;
+ IfrNvData->ISCSIConnectRetry[Index] = SessionConfigData->ConnectRetryCount;
+ IfrNvData->ISCSIConnectTimeout[Index] = SessionConfigData->ConnectTimeout;
+ IfrNvData->ISCSITargetTcpPort[Index] = SessionConfigData->TargetPort;
+
+ if (SessionConfigData->IpMode == IP_MODE_IP4) {
+ CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);
+ CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);
+ CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);
+ if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {
+ CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
+ }
+ } else if (SessionConfigData->IpMode == IP_MODE_IP6) {
+ ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));
+ if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {
+ IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);
+ IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
+ }
}
- }
- AsciiStrToUnicodeStrS (
- SessionConfigData->TargetName,
- IfrNvData->Keyword[Index].ISCSITargetName,
- ISCSI_NAME_MAX_SIZE
- );
-
- if (SessionConfigData->DnsMode) {
AsciiStrToUnicodeStrS (
- SessionConfigData->TargetUrl,
- IfrNvData->TargetIp,
- sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])
+ SessionConfigData->TargetName,
+ IfrNvData->Keyword[Index].ISCSITargetName,
+ ISCSI_NAME_MAX_SIZE
);
- }
- IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);
- IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);
+ if (SessionConfigData->DnsMode) {
+ AsciiStrToUnicodeStrS (
+ SessionConfigData->TargetUrl,
+ IfrNvData->TargetIp,
+ sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])
+ );
+ }
- IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;
+ IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);
+ IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);
- if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {
- AuthConfigData = &Attempt->AuthConfigData.CHAP;
- IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;
- AsciiStrToUnicodeStrS (
- AuthConfigData->CHAPName,
- IfrNvData->Keyword[Index].ISCSIChapUsername,
- ISCSI_CHAP_NAME_STORAGE
- );
+ IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;
- AsciiStrToUnicodeStrS (
- AuthConfigData->CHAPSecret,
- IfrNvData->Keyword[Index].ISCSIChapSecret,
- ISCSI_CHAP_SECRET_STORAGE
- );
+ if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {
+ AuthConfigData = &Attempt->AuthConfigData.CHAP;
+ IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;
+ AsciiStrToUnicodeStrS (
+ AuthConfigData->CHAPName,
+ IfrNvData->Keyword[Index].ISCSIChapUsername,
+ ISCSI_CHAP_NAME_STORAGE
+ );
- AsciiStrToUnicodeStrS (
- AuthConfigData->ReverseCHAPName,
- IfrNvData->Keyword[Index].ISCSIReverseChapUsername,
- ISCSI_CHAP_NAME_STORAGE
- );
+ AsciiStrToUnicodeStrS (
+ AuthConfigData->CHAPSecret,
+ IfrNvData->Keyword[Index].ISCSIChapSecret,
+ ISCSI_CHAP_SECRET_STORAGE
+ );
- AsciiStrToUnicodeStrS (
- AuthConfigData->ReverseCHAPSecret,
- IfrNvData->Keyword[Index].ISCSIReverseChapSecret,
- ISCSI_CHAP_SECRET_STORAGE
- );
+ AsciiStrToUnicodeStrS (
+ AuthConfigData->ReverseCHAPName,
+ IfrNvData->Keyword[Index].ISCSIReverseChapUsername,
+ ISCSI_CHAP_NAME_STORAGE
+ );
+
+ AsciiStrToUnicodeStrS (
+ AuthConfigData->ReverseCHAPSecret,
+ IfrNvData->Keyword[Index].ISCSIReverseChapSecret,
+ ISCSI_CHAP_SECRET_STORAGE
+ );
+ }
}
- }
- CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);
+ CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);
+ }
}
/**
@@ -1201,6 +1208,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
UINT64 Lun;
EFI_STATUS Status;
+ Attempt = NULL;
ZeroMem (IScsiName, sizeof (IScsiName));
if (OffSet < ATTEMPT_BOOTENABLE_VAR_OFFSET) {
@@ -1728,7 +1736,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
//
// Record the user configuration information in NVR.
//
-
+ ASSERT (Attempt != NULL);
UnicodeSPrint (mPrivate->PortString, (UINTN) ISCSI_NAME_IFR_MAX_SIZE, L"Attempt %d", Attempt->AttemptConfigIndex);
return gRT->SetVariable (
mPrivate->PortString,
@@ -2707,6 +2715,7 @@ IScsiConfigProcessDefault (
UINTN Index;
EFI_INPUT_KEY Key;
+ AttemptConfigData = NULL;
//
// Is User creating a new attempt?
//
@@ -2751,37 +2760,38 @@ IScsiConfigProcessDefault (
&AttemptConfigOrderSize
);
- if (AttemptConfigOrder != NULL) {
-
- for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {
- UnicodeSPrint (
- mPrivate->PortString,
- (UINTN) ISCSI_NAME_IFR_MAX_SIZE,
- L"Attempt %d",
- (UINTN) AttemptConfigOrder[Index]
- );
- GetVariable2 (
- mPrivate->PortString,
- &gEfiIScsiInitiatorNameProtocolGuid,
- (VOID**)&AttemptConfigData,
- NULL
- );
- if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {
- continue;
- }
-
- break;
- }
+ if (AttemptConfigOrder == NULL) {
+ return EFI_NOT_FOUND;
+ }
- if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {
- CreatePopUp (
- EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
- &Key,
- L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",
- NULL
- );
- return EFI_UNSUPPORTED;
+ for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {
+ UnicodeSPrint (
+ mPrivate->PortString,
+ (UINTN) ISCSI_NAME_IFR_MAX_SIZE,
+ L"Attempt %d",
+ (UINTN) AttemptConfigOrder[Index]
+ );
+ GetVariable2 (
+ mPrivate->PortString,
+ &gEfiIScsiInitiatorNameProtocolGuid,
+ (VOID**)&AttemptConfigData,
+ NULL
+ );
+ if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {
+ continue;
}
+
+ break;
+ }
+
+ if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {
+ CreatePopUp (
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
+ &Key,
+ L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",
+ NULL
+ );
+ return EFI_UNSUPPORTED;
}
if (AttemptConfigOrder != NULL) {
@@ -2798,6 +2808,7 @@ IScsiConfigProcessDefault (
MacString
);
+ ASSERT (AttemptConfigData != NULL);
UnicodeStrToAsciiStrS (MacString, AttemptConfigData->MacString, sizeof (AttemptConfigData->MacString));
AttemptConfigData->NicIndex = NicIndex;
AttemptConfigData->Actived = ISCSI_ACTIVE_ENABLED;
@@ -3128,6 +3139,7 @@ IScsiFormRouteConfig (
Index2 = 0;
NicInfo = NULL;
AttemptList = NULL;
+ Status = EFI_SUCCESS;
if (This == NULL || Configuration == NULL || Progress == NULL) {
return EFI_INVALID_PARAMETER;
@@ -3184,14 +3196,23 @@ IScsiFormRouteConfig (
goto Exit;
}
} else {
- Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);
+ Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);
if (EFI_ERROR (Status)) {
- CreatePopUp (
- EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
- &Key,
- L"Error: please configure iSCSI initiator name first!",
- NULL
- );
+ goto Exit;
+ }
+
+ if (OffSet >= ATTEMPT_MAC_ADDR_VAR_OFFSET) {
+ Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);
+ if (EFI_ERROR (Status)) {
+ CreatePopUp (
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
+ &Key,
+ L"Error: please configure iSCSI initiator name first!",
+ NULL
+ );
+ goto Exit;
+ }
+ } else {
goto Exit;
}
@@ -3290,10 +3311,6 @@ IScsiFormRouteConfig (
}
} else {
- Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);
- if (EFI_ERROR (Status)) {
- goto Exit;
- }
Status = IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (IfrNvData, OffSet);
if (EFI_ERROR (Status)) {
goto Exit;
@@ -3303,8 +3320,6 @@ IScsiFormRouteConfig (
IScsiConfigUpdateAttempt ();
- Status = EFI_SUCCESS;
-
Exit:
if (InitiatorName != NULL) {
FreePool (InitiatorName);