mirror of https://github.com/acidanthera/audk.git
NetworkPkg: Fix bug in iSCSI mode ipv6 when enabling target DHCP.
if the server name expressed as a site local address begain with FEC0 when retrieving from dhcpv6 option 59 boot file url, it incorrectly process it as a dns name. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> Cc: Wu Jiaxin <jiaxin.wu@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
This commit is contained in:
parent
597cf8a19f
commit
91cdd20f70
|
@ -50,7 +50,7 @@ IScsiDhcp6ExtractRootPath (
|
|||
UINT8 IpMode;
|
||||
|
||||
ConfigNvData = &ConfigData->SessionConfigData;
|
||||
|
||||
ConfigNvData->DnsMode = FALSE;
|
||||
//
|
||||
// "iscsi:"<servername>":"<protocol>":"<port>":"<LUN>":"<targetname>
|
||||
//
|
||||
|
@ -82,23 +82,36 @@ IScsiDhcp6ExtractRootPath (
|
|||
// Extract SERVERNAME field in the Root Path option.
|
||||
//
|
||||
if (TmpStr[Index] != ISCSI_ROOT_PATH_ADDR_START_DELIMITER) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto ON_EXIT;
|
||||
//
|
||||
// The servername is expressed as domain name.
|
||||
//
|
||||
ConfigNvData->DnsMode = TRUE;
|
||||
} else {
|
||||
Index++;
|
||||
}
|
||||
|
||||
Fields[RP_FIELD_IDX_SERVERNAME].Str = &TmpStr[Index];
|
||||
|
||||
while ((TmpStr[Index] != ISCSI_ROOT_PATH_ADDR_END_DELIMITER) && (Index < Length)) {
|
||||
Index++;
|
||||
}
|
||||
if (!ConfigNvData->DnsMode) {
|
||||
while ((TmpStr[Index] != ISCSI_ROOT_PATH_ADDR_END_DELIMITER)&& (Index < Length)) {
|
||||
Index++;
|
||||
}
|
||||
|
||||
//
|
||||
// Skip ']' and ':'.
|
||||
//
|
||||
TmpStr[Index] = '\0';
|
||||
Index += 2;
|
||||
//
|
||||
// Skip ']' and ':'.
|
||||
//
|
||||
TmpStr[Index] = '\0';
|
||||
Index += 2;
|
||||
} else {
|
||||
while ((TmpStr[Index] != ISCSI_ROOT_PATH_FIELD_DELIMITER) && (Index < Length)) {
|
||||
Index++;
|
||||
}
|
||||
//
|
||||
// Skip ':'.
|
||||
//
|
||||
TmpStr[Index] = '\0';
|
||||
Index += 1;
|
||||
}
|
||||
|
||||
Fields[RP_FIELD_IDX_SERVERNAME].Len = (UINT8) AsciiStrLen (Fields[RP_FIELD_IDX_SERVERNAME].Str);
|
||||
|
||||
|
@ -153,8 +166,7 @@ IScsiDhcp6ExtractRootPath (
|
|||
//
|
||||
// Server name is expressed as domain name, just save it.
|
||||
//
|
||||
if ((!NET_IS_DIGIT (*(Field->Str))) && (*(Field->Str) != '[')) {
|
||||
ConfigNvData->DnsMode = TRUE;
|
||||
if (ConfigNvData->DnsMode) {
|
||||
if (Field->Len > sizeof (ConfigNvData->TargetUrl)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue