This patch is used to fix ifconfig hang issue with incomplete parameters. In addition, some error related output information is added to increase the interactivity.
Cc: Leekha Shaveta <shav...@freescale.com> Cc: Carsey Jaben <jaben.car...@intel.com> Cc: Ye Ting <ting...@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu <jiaxin...@intel.com> --- .../UefiShellNetwork1CommandsLib/Ifconfig.c | 61 ++++++++++++++++----- .../UefiShellNetwork1CommandsLib.uni | Bin 21094 -> 21256 bytes 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c index fb6f575..f8dbc88 100644 --- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c +++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c @@ -826,10 +826,11 @@ IfConfigClearInterfaceInfo ( Ip4Config2DataTypePolicy, sizeof (EFI_IP4_CONFIG2_POLICY), &Policy ); if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig"); ShellStatus = SHELL_ACCESS_DENIED; break; } } @@ -902,10 +903,11 @@ IfConfigSetInterfaceInfo ( NULL, NULL, &TimeOutEvt ); if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig"); ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } Status = gBS->CreateEvent ( @@ -914,10 +916,11 @@ IfConfigSetInterfaceInfo ( IfConfigManualAddressNotify, &IsAddressOk, &MappedEvt ); if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig"); ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } // @@ -972,10 +975,11 @@ IfConfigSetInterfaceInfo ( // if (StrCmp(VarArg->Arg, L"dhcp") == 0) { if (IfCb->Policy == Ip4Config2PolicyDhcp) { Status = IfConfigStartIp4 (IfCb->NicHandle, gImageHandle); if (EFI_ERROR(Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig"); ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } } else { // @@ -987,74 +991,100 @@ IfConfigSetInterfaceInfo ( Ip4Config2DataTypePolicy, sizeof (EFI_IP4_CONFIG2_POLICY), &Policy ); if (EFI_ERROR(Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig"); ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } } VarArg= VarArg->Next; } else if (StrCmp (VarArg->Arg, L"static") == 0) { - // - // Set manual config policy. - // - Policy = Ip4Config2PolicyStatic; - Status = IfCb->IfCfg->SetData ( - IfCb->IfCfg, - Ip4Config2DataTypePolicy, - sizeof (EFI_IP4_CONFIG2_POLICY), - &Policy - ); - if (EFI_ERROR(Status)) { - ShellStatus = SHELL_ACCESS_DENIED; + VarArg= VarArg->Next; + if (VarArg == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle); + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } - VarArg= VarArg->Next; - ZeroMem (&ManualAddress, sizeof (ManualAddress)); // // Get manual IP address. // Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.Address); if (EFI_ERROR(Status)) { + ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg); ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } // // Get subnetmask. // VarArg = VarArg->Next; + if (VarArg == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle); + ShellStatus = SHELL_INVALID_PARAMETER; + goto ON_EXIT; + } + Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.SubnetMask); if (EFI_ERROR(Status)) { + ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg); ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } // // Get gateway. // VarArg = VarArg->Next; + if (VarArg == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle); + ShellStatus = SHELL_INVALID_PARAMETER; + goto ON_EXIT; + } + Status = NetLibStrToIp4 (VarArg->Arg, &Gateway); if (EFI_ERROR(Status)) { + ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg); ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } + + // + // Set manual config policy. + // + Policy = Ip4Config2PolicyStatic; + Status = IfCb->IfCfg->SetData ( + IfCb->IfCfg, + Ip4Config2DataTypePolicy, + sizeof (EFI_IP4_CONFIG2_POLICY), + &Policy + ); + if (EFI_ERROR(Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig"); + ShellStatus = SHELL_ACCESS_DENIED; + goto ON_EXIT; + } + // + // Set Manual Address. + // IsAddressOk = FALSE; Status = IfCb->IfCfg->RegisterDataNotify ( IfCb->IfCfg, Ip4Config2DataTypeManualAddress, MappedEvt ); if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status); ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } DataSize = sizeof (EFI_IP4_CONFIG2_MANUAL_ADDRESS); @@ -1099,10 +1129,11 @@ IfConfigSetInterfaceInfo ( Ip4Config2DataTypeGateway, DataSize, &Gateway ); if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status); ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } VarArg = VarArg->Next; @@ -1124,10 +1155,11 @@ IfConfigSetInterfaceInfo ( Tmp = VarArg; Index = 0; while (Tmp != NULL) { Status = NetLibStrToIp4 (Tmp->Arg, Dns + Index); if (EFI_ERROR(Status)) { + ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, Tmp->Arg); ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } Index ++; Tmp = Tmp->Next; @@ -1145,10 +1177,11 @@ IfConfigSetInterfaceInfo ( Ip4Config2DataTypeDnsServer, DataSize, Dns ); if (EFI_ERROR (Status)) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig"); ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } } } diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni index 43259591820582cc38937ad680739fcff21b96c5..aa3a38a55fadd82f73d581f3678466db23af2645 100644 GIT binary patch delta 132 zcmaF1gt228<AxB$$qt$<ljkV#@dq$CGPnR?5Q8g2FhlU<kMfq2KPd=JPSO)&w3>X8 zLv*r>oYCeGMJ;AcH-<!pOokkWRE87=1%?uad>~m2<dp#FM4(s-LlKZy%uqZzQNeuj c3{}3(PgHEwCNp{2OwRH?2ckDm^SQtZ0B9B^1poj5 delta 74 zcmeBJ#`tUr<AxB$&2maw%<P^FB@7A-X_Gxwr8gI;HmGqYGUNcE0z*DS(d3I>_LKE| V&ar~UCL1b<Gebo;TlijJ1pqo#7J2{x -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel