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>
This commit is contained in:
Zhang Lubo 2017-02-27 14:46:59 +08:00 committed by Jiaxin Wu
parent e4408576df
commit 2fd40fa58f
2 changed files with 153 additions and 138 deletions

View File

@ -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;
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;
Index = Attempt->AttemptConfigIndex - 1;
ASSERT ((Attempt->AttemptConfigIndex > 0) && (Attempt->AttemptConfigIndex <= FixedPcdGet8 (PcdMaxIScsiAttemptNumber)));
Index = Attempt->AttemptConfigIndex - 1;
//
// 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' ';
AsciiStrToUnicodeStrS (
Attempt->AttemptName,
IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,
ATTEMPT_NAME_SIZE
);
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
//
// Save the attempt to AttemptNameList as Attempt:1 Attempt:2
//
AsciiStrToUnicodeStrS (
Attempt->AttemptName,
AttemptNameList + StrLen (AttemptNameList),
ATTEMPT_NAME_LIST_SIZE - StrLen (AttemptNameList)
);
if (SessionConfigData->DnsMode) {
StringLen = StrLen (AttemptNameList);
ASSERT (StringLen > 2);
*(AttemptNameList + StringLen - 2) = L':';
*(AttemptNameList + StringLen) = L' ';
AsciiStrToUnicodeStrS (
SessionConfigData->TargetUrl,
IfrNvData->TargetIp,
sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])
Attempt->AttemptName,
IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,
ATTEMPT_NAME_LIST_SIZE - ATTEMPT_NAME_SIZE * Index
);
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])
);
}
IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);
IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);
IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;
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->CHAPSecret,
IfrNvData->Keyword[Index].ISCSIChapSecret,
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
);
}
}
IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);
IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);
IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;
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->CHAPSecret,
IfrNvData->Keyword[Index].ISCSIChapSecret,
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) {
if (AttemptConfigOrder == NULL) {
return EFI_NOT_FOUND;
}
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;
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);

View File

@ -31,7 +31,6 @@ extern ISCSI_FORM_CALLBACK_INFO *mCallbackInfo;
#define QUESTION_ID(Field) \
((UINT16) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET))
#define DYNAMIC_ONE_OF_VAR_OFFSET VAR_OFFSET (Enabled)
#define DYNAMIC_ORDERED_LIST_QUESTION_ID QUESTION_ID (DynamicOrderedList)
#define DYNAMIC_ORDERED_LIST_VAR_OFFSET VAR_OFFSET (DynamicOrderedList)
@ -43,6 +42,7 @@ extern ISCSI_FORM_CALLBACK_INFO *mCallbackInfo;
//
// Define QuestionId and OffSet for Keywords.
//
#define ATTEMPT_MAC_ADDR_VAR_OFFSET VAR_OFFSET (ISCSIMacAddr)
#define ATTEMPT_ATTEMPT_NAME_QUESTION_ID QUESTION_ID (ISCSIAttemptName)
#define ATTEMPT_ATTEMPT_NAME_VAR_OFFSET VAR_OFFSET (ISCSIAttemptName)
#define ATTEMPT_BOOTENABLE_QUESTION_ID QUESTION_ID (ISCSIBootEnableList)