Fix for potential use of uninitialized variables 26/3126/2
authorIgor Mikhailov (imichail) <imichail@cisco.com>
Sun, 25 Sep 2016 22:11:53 +0000 (15:11 -0700)
committerJohn Lo <loj@cisco.com>
Mon, 26 Sep 2016 21:50:10 +0000 (21:50 +0000)
The code allowed for the command 'set interface unnumbered'
to be processed without specifying any parameters,
thus the set logic of the command would have been using uninitialized
variables 'unnumbered_sw_if_index' and 'inherit_from_sw_if_index'.

Change-Id: I4de14fa1096527c5c48f74304db379f9953760a8
Signed-off-by: Igor Mikhailov (imichail) <imichail@cisco.com>
vnet/vnet/interface_cli.c

index 477716d..f7d42a7 100644 (file)
@@ -815,27 +815,17 @@ set_unnumbered (vlib_main_t * vm,
   int is_set = 0;
   int is_del = 0;
 
-  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
-    {
-
-      if (unformat (input, "%U use %U",
-                   unformat_vnet_sw_interface, vnm, &unnumbered_sw_if_index,
-                   unformat_vnet_sw_interface, vnm,
-                   &inherit_from_sw_if_index))
-       is_set = 1;
-      else if (unformat (input, "del %U",
-                        unformat_vnet_sw_interface,
-                        vnm, &unnumbered_sw_if_index))
-       is_del = 1;
-      else
-       {
-         if (is_set || is_del)
-           break;
-         else
-           return clib_error_return
-             (0, "parse error '%U'", format_unformat_error, input);
-       }
-    }
+  if (unformat (input, "%U use %U",
+               unformat_vnet_sw_interface, vnm, &unnumbered_sw_if_index,
+               unformat_vnet_sw_interface, vnm, &inherit_from_sw_if_index))
+    is_set = 1;
+  else if (unformat (input, "del %U",
+                    unformat_vnet_sw_interface, vnm,
+                    &unnumbered_sw_if_index))
+    is_del = 1;
+  else
+    return clib_error_return (0, "parse error '%U'",
+                             format_unformat_error, input);
 
   si = vnet_get_sw_interface (vnm, unnumbered_sw_if_index);
   if (is_del)
@@ -843,7 +833,7 @@ set_unnumbered (vlib_main_t * vm,
       si->flags &= ~(VNET_SW_INTERFACE_FLAG_UNNUMBERED);
       si->unnumbered_sw_if_index = (u32) ~ 0;
     }
-  else
+  else if (is_set)
     {
       si->flags |= VNET_SW_INTERFACE_FLAG_UNNUMBERED;
       si->unnumbered_sw_if_index = inherit_from_sw_if_index;
@@ -855,7 +845,7 @@ set_unnumbered (vlib_main_t * vm,
 /* *INDENT-OFF* */
 VLIB_CLI_COMMAND (set_unnumbered_command, static) = {
   .path = "set interface unnumbered",
-  .short_help = "set interface unnumbered [<intfc> use <intfc>][del <intfc>]",
+  .short_help = "set interface unnumbered [<intfc> use <intfc> | del <intfc>]",
   .function = set_unnumbered,
 };
 /* *INDENT-ON* */