From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 82FA482164 for ; Thu, 23 Feb 2017 22:27:00 -0800 (PST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Feb 2017 22:27:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,200,1484035200"; d="scan'208";a="1134269823" Received: from shwdeopenpsi116.ccr.corp.intel.com ([10.239.9.7]) by fmsmga002.fm.intel.com with ESMTP; 23 Feb 2017 22:26:58 -0800 From: Zhang Lubo To: edk2-devel@lists.01.org Cc: Ye Ting , Fu Siyuan , Wu Jiaxin Date: Fri, 24 Feb 2017 14:26:57 +0800 Message-Id: <1487917617-10748-1-git-send-email-lubo.zhang@intel.com> X-Mailer: git-send-email 1.9.5.msysgit.1 Subject: [patch] NetworkPkg: Add check logic for some variable in iSCSI driver. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Feb 2017 06:27:00 -0000 Add check logic for some attempt variable to enhance code in iSCSI. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo Cc: Ye Ting Cc: Fu Siyuan Cc: Wu Jiaxin --- NetworkPkg/IScsiDxe/IScsiConfig.c | 75 +++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/NetworkPkg/IScsiDxe/IScsiConfig.c b/NetworkPkg/IScsiDxe/IScsiConfig.c index b169620..f8c0a61 100644 --- a/NetworkPkg/IScsiDxe/IScsiConfig.c +++ b/NetworkPkg/IScsiDxe/IScsiConfig.c @@ -628,37 +628,42 @@ IScsiConvertAttemptConfigDataToIfrNvDataByKeyword ( ISCSI_SESSION_CONFIG_NVDATA *SessionConfigData; ISCSI_CHAP_AUTH_CONFIG_NVDATA *AuthConfigData; 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; + 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 + ATTEMPT_NAME_LIST_SIZE - StrLen (AttemptNameList) ); - *(AttemptNameList + StrLen (AttemptNameList) - 2) = L':'; - *(AttemptNameList + StrLen (AttemptNameList)) = L' '; + + StringLen = StrLen (AttemptNameList); + ASSERT (StringLen > 2); + *(AttemptNameList + StringLen - 2) = L':'; + *(AttemptNameList + StringLen) = L' '; AsciiStrToUnicodeStrS ( Attempt->AttemptName, IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index, - ATTEMPT_NAME_SIZE + ATTEMPT_NAME_LIST_SIZE - ATTEMPT_NAME_SIZE * Index ); IfrNvData->ISCSIBootEnableList[Index] = SessionConfigData->Enabled; IfrNvData->ISCSIIpAddressTypeList[Index] = SessionConfigData->IpMode; @@ -1199,10 +1204,11 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword ( EFI_IP_ADDRESS Gateway; EFI_INPUT_KEY Key; UINT64 Lun; EFI_STATUS Status; + Attempt = NULL; ZeroMem (IScsiName, sizeof (IScsiName)); if (OffSet < ATTEMPT_BOOTENABLE_VAR_OFFSET) { return EFI_SUCCESS; @@ -1726,11 +1732,11 @@ 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, &gEfiIScsiInitiatorNameProtocolGuid, ISCSI_CONFIG_VAR_ATTR, @@ -2705,10 +2711,11 @@ IScsiConfigProcessDefault ( UINT8 *AttemptConfigOrder; UINTN AttemptConfigOrderSize; UINTN Index; EFI_INPUT_KEY Key; + AttemptConfigData = NULL; // // Is User creating a new attempt? // NewAttempt = FALSE; @@ -2749,41 +2756,40 @@ IScsiConfigProcessDefault ( L"InitialAttemptOrder", &gIScsiConfigGuid, &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; - } + ASSERT (AttemptConfigOrder != NULL); - 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) { FreePool (AttemptConfigOrder); } @@ -2796,10 +2802,11 @@ IScsiConfigProcessDefault ( NicInfo->HwAddressSize, NicInfo->VlanId, MacString ); + ASSERT (AttemptConfigData != NULL); UnicodeStrToAsciiStrS (MacString, AttemptConfigData->MacString, sizeof (AttemptConfigData->MacString)); AttemptConfigData->NicIndex = NicIndex; AttemptConfigData->Actived = ISCSI_ACTIVE_ENABLED; // -- 1.9.5.msysgit.1