The Ifconfig command handler tries to return an EFI_STATUS when the return type should be SHELL_STATUS.
Cc: Cohen, Eugene <eug...@hp.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 | 102 ++++++++++++++------- 1 file changed, 69 insertions(+), 33 deletions(-) diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c index e16d46a..fb6f575 100644 --- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c +++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c @@ -421,11 +421,11 @@ IfConfigGetInterfaceInfo ( NULL, &HandleNum, &HandleBuffer ); if (EFI_ERROR (Status) || (HandleNum == 0)) { - return EFI_ABORTED; + return Status; } // // Enumerate all handles that installed with ip4 service binding protocol. // @@ -585,15 +585,15 @@ ON_ERROR: /** The list process of the ifconfig command. @param[in] IfList The pointer of IfList(interface list). - @retval EFI_SUCCESS The ifconfig command list processed successfully. + @retval SHELL_SUCCESS The ifconfig command list processed successfully. @retval others The ifconfig command list process failed. **/ -EFI_STATUS +SHELL_STATUS IfConfigShowInterfaceInfo ( IN LIST_ENTRY *IfList ) { LIST_ENTRY *Entry; @@ -781,35 +781,37 @@ IfConfigShowInterfaceInfo ( } } ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_BREAK), gShellNetwork1HiiHandle); - return EFI_SUCCESS; + return SHELL_SUCCESS; } /** The clean process of the ifconfig command to clear interface info. @param[in] IfList The pointer of IfList(interface list). - @retval EFI_SUCCESS The ifconfig command clean processed successfully. + @retval SHELL_SUCCESS The ifconfig command clean processed successfully. @retval others The ifconfig command clean process failed. **/ -EFI_STATUS +SHELL_STATUS IfConfigClearInterfaceInfo ( IN LIST_ENTRY *IfList ) { - EFI_STATUS Status; + EFI_STATUS Status; + SHELL_STATUS ShellStatus; LIST_ENTRY *Entry; LIST_ENTRY *Next; IFCONFIG_INTERFACE_CB *IfCb; EFI_IP4_CONFIG2_POLICY Policy; Policy = Ip4Config2PolicyDhcp; Status = EFI_SUCCESS; + ShellStatus = SHELL_SUCCESS; if (IsListEmpty (IfList)) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle); } @@ -823,37 +825,37 @@ IfConfigClearInterfaceInfo ( IfCb->IfCfg, Ip4Config2DataTypePolicy, sizeof (EFI_IP4_CONFIG2_POLICY), &Policy ); - if (EFI_ERROR (Status)) { + ShellStatus = SHELL_ACCESS_DENIED; break; } } - return Status; + return ShellStatus; } /** The set process of the ifconfig command. @param[in] IfList The pointer of IfList(interface list). @param[in] VarArg The pointer of ARG_LIST(Args with "-s" option). - @retval EFI_SUCCESS The ifconfig command set processed successfully. + @retval SHELL_SUCCESS The ifconfig command set processed successfully. @retval others The ifconfig command set process failed. **/ -EFI_STATUS +SHELL_STATUS IfConfigSetInterfaceInfo ( IN LIST_ENTRY *IfList, IN ARG_LIST *VarArg ) { - EFI_STATUS Status; + SHELL_STATUS ShellStatus; IFCONFIG_INTERFACE_CB *IfCb; VAR_CHECK_CODE CheckCode; EFI_EVENT TimeOutEvt; EFI_EVENT MappedEvt; BOOLEAN IsAddressOk; @@ -870,18 +872,19 @@ IfConfigSetInterfaceInfo ( Dns = NULL; if (IsListEmpty (IfList)) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle); - return EFI_INVALID_PARAMETER; + return SHELL_INVALID_PARAMETER; } // // Make sure to set only one interface each time. // IfCb = NET_LIST_USER_STRUCT (IfList->ForwardLink, IFCONFIG_INTERFACE_CB, Link); Status = EFI_SUCCESS; + ShellStatus = SHELL_SUCCESS; // // Initialize check list mechanism. // CheckCode = IfConfigRetriveCheckListByName( @@ -899,10 +902,11 @@ IfConfigSetInterfaceInfo ( NULL, NULL, &TimeOutEvt ); if (EFI_ERROR (Status)) { + ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL, @@ -910,10 +914,11 @@ IfConfigSetInterfaceInfo ( IfConfigManualAddressNotify, &IsAddressOk, &MappedEvt ); if (EFI_ERROR (Status)) { + ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } // // Parse the setting variables. @@ -967,10 +972,11 @@ IfConfigSetInterfaceInfo ( // if (StrCmp(VarArg->Arg, L"dhcp") == 0) { if (IfCb->Policy == Ip4Config2PolicyDhcp) { Status = IfConfigStartIp4 (IfCb->NicHandle, gImageHandle); if (EFI_ERROR(Status)) { + ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } } else { // // Set dhcp config policy @@ -981,10 +987,11 @@ IfConfigSetInterfaceInfo ( Ip4Config2DataTypePolicy, sizeof (EFI_IP4_CONFIG2_POLICY), &Policy ); if (EFI_ERROR(Status)) { + ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } } VarArg= VarArg->Next; @@ -998,12 +1005,12 @@ IfConfigSetInterfaceInfo ( IfCb->IfCfg, Ip4Config2DataTypePolicy, sizeof (EFI_IP4_CONFIG2_POLICY), &Policy ); - if (EFI_ERROR(Status)) { + ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } VarArg= VarArg->Next; @@ -1012,28 +1019,31 @@ IfConfigSetInterfaceInfo ( // // Get manual IP address. // Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.Address); if (EFI_ERROR(Status)) { + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } // // Get subnetmask. // VarArg = VarArg->Next; Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.SubnetMask); if (EFI_ERROR(Status)) { + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } // // Get gateway. // VarArg = VarArg->Next; Status = NetLibStrToIp4 (VarArg->Arg, &Gateway); if (EFI_ERROR(Status)) { + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } IsAddressOk = FALSE; @@ -1041,10 +1051,11 @@ IfConfigSetInterfaceInfo ( IfCb->IfCfg, Ip4Config2DataTypeManualAddress, MappedEvt ); if (EFI_ERROR (Status)) { + ShellStatus = SHELL_ACCESS_DENIED; goto ON_EXIT; } DataSize = sizeof (EFI_IP4_CONFIG2_MANUAL_ADDRESS); @@ -1069,13 +1080,14 @@ IfConfigSetInterfaceInfo ( IfCb->IfCfg->UnregisterDataNotify ( 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; } // // Set gateway. @@ -1086,10 +1098,15 @@ IfConfigSetInterfaceInfo ( IfCb->IfCfg, Ip4Config2DataTypeGateway, DataSize, &Gateway ); + if (EFI_ERROR (Status)) { + ShellStatus = SHELL_ACCESS_DENIED; + goto ON_EXIT; + } + VarArg = VarArg->Next; } else if (StrCmp (VarArg->Arg, L"dns") == 0) { // // Get DNS addresses. @@ -1107,10 +1124,11 @@ IfConfigSetInterfaceInfo ( Tmp = VarArg; Index = 0; while (Tmp != NULL) { Status = NetLibStrToIp4 (Tmp->Arg, Dns + Index); if (EFI_ERROR(Status)) { + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } Index ++; Tmp = Tmp->Next; } @@ -1126,70 +1144,76 @@ IfConfigSetInterfaceInfo ( IfCb->IfCfg, Ip4Config2DataTypeDnsServer, DataSize, Dns ); + if (EFI_ERROR (Status)) { + ShellStatus = SHELL_ACCESS_DENIED; + goto ON_EXIT; + } } } ON_EXIT: if (Dns != NULL) { FreePool (Dns); } - return Status; + return ShellStatus; } /** The ifconfig command main process. @param[in] Private The pointer of IFCONFIG_PRIVATE_DATA. - @retval EFI_SUCCESS ifconfig command processed successfully. + @retval SHELL_SUCCESS ifconfig command processed successfully. @retval others The ifconfig command process failed. **/ -EFI_STATUS +SHELL_STATUS IfConfig ( IN IFCONFIG_PRIVATE_DATA *Private ) { EFI_STATUS Status; + SHELL_STATUS ShellStatus; + + ShellStatus = SHELL_SUCCESS; // // Get configure information of all interfaces. // Status = IfConfigGetInterfaceInfo ( Private->IfName, &Private->IfList ); - if (EFI_ERROR (Status)) { + ShellStatus = SHELL_NOT_FOUND; goto ON_EXIT; } switch (Private->OpCode) { case IfConfigOpList: - Status = IfConfigShowInterfaceInfo (&Private->IfList); + ShellStatus = IfConfigShowInterfaceInfo (&Private->IfList); break; case IfConfigOpClear: - Status = IfConfigClearInterfaceInfo (&Private->IfList); + ShellStatus = IfConfigClearInterfaceInfo (&Private->IfList); break; case IfConfigOpSet: - Status = IfConfigSetInterfaceInfo (&Private->IfList, Private->VarArg); + ShellStatus = IfConfigSetInterfaceInfo (&Private->IfList, Private->VarArg); break; default: - Status = EFI_ABORTED; + ShellStatus = SHELL_UNSUPPORTED; } ON_EXIT: - - return Status; + return ShellStatus; } /** The ifconfig command cleanup process, free the allocated memory. @@ -1265,56 +1289,66 @@ ShellCommandRunIfconfig ( ) { EFI_STATUS Status; IFCONFIG_PRIVATE_DATA *Private; LIST_ENTRY *ParamPackage; + SHELL_STATUS ShellStatus; CONST CHAR16 *ValueStr; ARG_LIST *ArgList; CHAR16 *ProblemParam; CHAR16 *Str; - + + Status = EFI_INVALID_PARAMETER; Private = NULL; + ShellStatus = SHELL_SUCCESS; Status = ShellCommandLineParseEx (mIfConfigCheckList, &ParamPackage, &ProblemParam, TRUE, FALSE); if (EFI_ERROR (Status)) { - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ifconfig", ProblemParam); + if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ifconfig", ProblemParam); + FreePool(ProblemParam); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + ASSERT(FALSE); + } + goto ON_EXIT; } // // To handle unsupported option. // if (ShellCommandLineGetFlag (ParamPackage, L"-c")) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_UNSUPPORTED_OPTION), gShellNetwork1HiiHandle,L"-c"); + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } // // To handle no option. // if (!ShellCommandLineGetFlag (ParamPackage, L"-r") && !ShellCommandLineGetFlag (ParamPackage, L"-s") && !ShellCommandLineGetFlag (ParamPackage, L"-l")) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_OPTION), gShellNetwork1HiiHandle); + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } // // To handle conflict options. // if (((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-s"))) || ((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-l"))) || ((ShellCommandLineGetFlag (ParamPackage, L"-s")) && (ShellCommandLineGetFlag (ParamPackage, L"-l")))) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CON), gShellNetwork1HiiHandle, L"ifconfig"); + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } - Status = EFI_INVALID_PARAMETER; - Private = AllocateZeroPool (sizeof (IFCONFIG_PRIVATE_DATA)); - if (Private == NULL) { - Status = EFI_OUT_OF_RESOURCES; + ShellStatus = SHELL_OUT_OF_RESOURCES; goto ON_EXIT; } InitializeListHead (&Private->IfList); @@ -1349,10 +1383,11 @@ ShellCommandRunIfconfig ( // if (ShellCommandLineGetFlag (ParamPackage, L"-s")) { ValueStr = ShellCommandLineGetValue (ParamPackage, L"-s"); if (ValueStr == NULL) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_INTERFACE), gShellNetwork1HiiHandle); + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } // // To split the configuration into multi-section. @@ -1365,24 +1400,25 @@ ShellCommandRunIfconfig ( Private->VarArg = ArgList->Next; if (Private->IfName == NULL || Private->VarArg == NULL) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle); + ShellStatus = SHELL_INVALID_PARAMETER; goto ON_EXIT; } } // // Main process of ifconfig. // - Status = IfConfig (Private); + ShellStatus = IfConfig (Private); ON_EXIT: ShellCommandLineFreeVarList (ParamPackage); if (Private != NULL) { IfConfigCleanup (Private); } - return Status; + return ShellStatus; } -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel