Fix double free in af_packet api/cli
[vpp.git] / vnet / vnet / devices / af_packet / cli.c
index 3153efe..2cbd415 100644 (file)
@@ -36,85 +36,96 @@ static clib_error_t *
 af_packet_create_command_fn (vlib_main_t * vm, unformat_input_t * input,
                             vlib_cli_command_t * cmd)
 {
-  unformat_input_t _line_input, * line_input = &_line_input;
-  u8 * host_if_name = NULL;
-  u8 hwaddr [6];
-  u8 * hw_addr_ptr = 0;
+  unformat_input_t _line_input, *line_input = &_line_input;
+  u8 *host_if_name = NULL;
+  u8 hwaddr[6];
+  u8 *hw_addr_ptr = 0;
   u32 sw_if_index;
   int r;
 
   /* Get a line of input. */
-  if (! unformat_user (input, unformat_line_input, line_input))
+  if (!unformat_user (input, unformat_line_input, line_input))
     return 0;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (line_input, "name %s", &host_if_name))
        ;
-      else if (unformat (line_input, "hw-addr %U", unformat_ethernet_address, hwaddr))
+      else
+       if (unformat
+           (line_input, "hw-addr %U", unformat_ethernet_address, hwaddr))
        hw_addr_ptr = hwaddr;
       else
-       return clib_error_return (0, "unknown input `%U'", format_unformat_error, input);
+       return clib_error_return (0, "unknown input `%U'",
+                                 format_unformat_error, input);
     }
   unformat_free (line_input);
 
   if (host_if_name == NULL)
-      return clib_error_return (0, "missing host interface name");
+    return clib_error_return (0, "missing host interface name");
 
-  r = af_packet_create_if(vm, host_if_name, hw_addr_ptr, &sw_if_index);
+  r = af_packet_create_if (vm, host_if_name, hw_addr_ptr, &sw_if_index);
+  vec_free (host_if_name);
 
   if (r == VNET_API_ERROR_SYSCALL_ERROR_1)
-    return clib_error_return(0, "%s (errno %d)", strerror (errno), errno);
+    return clib_error_return (0, "%s (errno %d)", strerror (errno), errno);
 
   if (r == VNET_API_ERROR_INVALID_INTERFACE)
-    return clib_error_return(0, "Invalid interface name");
+    return clib_error_return (0, "Invalid interface name");
 
   if (r == VNET_API_ERROR_SUBIF_ALREADY_EXISTS)
-    return clib_error_return(0, "Interface elready exists");
+    return clib_error_return (0, "Interface elready exists");
 
-  vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
+  vlib_cli_output (vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main (),
+                  sw_if_index);
   return 0;
 }
 
+/* *INDENT-OFF* */
 VLIB_CLI_COMMAND (af_packet_create_command, static) = {
   .path = "create host-interface",
   .short_help = "create host-interface name <interface name> [hw-addr <mac>]",
   .function = af_packet_create_command_fn,
 };
+/* *INDENT-ON* */
 
 static clib_error_t *
 af_packet_delete_command_fn (vlib_main_t * vm, unformat_input_t * input,
-                             vlib_cli_command_t * cmd)
+                            vlib_cli_command_t * cmd)
 {
-  unformat_input_t _line_input, * line_input = &_line_input;
-  u8 * host_if_name = NULL;
+  unformat_input_t _line_input, *line_input = &_line_input;
+  u8 *host_if_name = NULL;
 
   /* Get a line of input. */
-  if (! unformat_user (input, unformat_line_input, line_input))
+  if (!unformat_user (input, unformat_line_input, line_input))
     return 0;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (line_input, "name %s", &host_if_name))
-        ;
+       ;
       else
-        return clib_error_return (0, "unknown input `%U'", format_unformat_error, input);
+       return clib_error_return (0, "unknown input `%U'",
+                                 format_unformat_error, input);
     }
   unformat_free (line_input);
 
   if (host_if_name == NULL)
-      return clib_error_return (0, "missing host interface name");
+    return clib_error_return (0, "missing host interface name");
 
-  af_packet_delete_if(vm, host_if_name);
+  af_packet_delete_if (vm, host_if_name);
+  vec_free (host_if_name);
 
   return 0;
 }
 
+/* *INDENT-OFF* */
 VLIB_CLI_COMMAND (af_packet_delete_command, static) = {
   .path = "delete host-interface",
   .short_help = "delete host-interface name <interface name>",
   .function = af_packet_delete_command_fn,
 };
+/* *INDENT-ON* */
 
 clib_error_t *
 af_packet_cli_init (vlib_main_t * vm)
@@ -123,3 +134,11 @@ af_packet_cli_init (vlib_main_t * vm)
 }
 
 VLIB_INIT_FUNCTION (af_packet_cli_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */