ShellPkg/Ifconfig6: Address ASSERT because of a missing NULL check

When we issue 'ifconfig6 -s <interface> auto' system hangs with
an ASSERT in StrLen. in IfConfig6SetInterfaceInfo, for 'auto' case
we added checks to rule out the invalid inputs like 'host', 'gw'
and 'dns'. To parse through this, we do a VarArg = VarArg->Next but
we dont check new VarArg before calling StrCmp. Fix with a check
in this patch.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hegde Nagaraj P <nagaraj-p.hegde@hpe.com>
Reviewed-by: Zhang Lubo <lubo.zhang@intel.com>
Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
Reviewed-by: Sriram Subramanian <sriram-s@hpe.com>
This commit is contained in:
hegdenag 2017-01-12 11:39:38 +08:00 committed by Jiaxin Wu
parent e9f0be021b
commit 521981ee76
1 changed files with 14 additions and 13 deletions

View File

@ -1317,20 +1317,21 @@ IfConfig6SetInterfaceInfo (
VarArg= VarArg->Next;
if (StrCmp (VarArg->Arg, L"host") == 0) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_IP_CONFIG), gShellNetwork2HiiHandle, Status);
ShellStatus = SHELL_INVALID_PARAMETER;
goto ON_EXIT;
} else if (StrCmp (VarArg->Arg, L"gw") == 0) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_GW_CONFIG), gShellNetwork2HiiHandle, Status);
ShellStatus = SHELL_INVALID_PARAMETER;
goto ON_EXIT;
} else if (StrCmp (VarArg->Arg, L"dns") == 0) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_DNS_CONFIG), gShellNetwork2HiiHandle, Status);
ShellStatus = SHELL_INVALID_PARAMETER;
goto ON_EXIT;
if (VarArg != NULL) {
if (StrCmp (VarArg->Arg, L"host") == 0) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_IP_CONFIG), gShellNetwork2HiiHandle, Status);
ShellStatus = SHELL_INVALID_PARAMETER;
goto ON_EXIT;
} else if (StrCmp (VarArg->Arg, L"gw") == 0) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_GW_CONFIG), gShellNetwork2HiiHandle, Status);
ShellStatus = SHELL_INVALID_PARAMETER;
goto ON_EXIT;
} else if (StrCmp (VarArg->Arg, L"dns") == 0) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_DNS_CONFIG), gShellNetwork2HiiHandle, Status);
ShellStatus = SHELL_INVALID_PARAMETER;
goto ON_EXIT;
}
}
} else if (StrCmp (VarArg->Arg, L"man") == 0) {
//
// Set manual config policy.