dpdk: fix vmbus device name parsing 92/34092/2
authorBenoît Ganne <bganne@cisco.com>
Wed, 13 Oct 2021 09:35:15 +0000 (11:35 +0200)
committerDamjan Marion <dmarion@me.com>
Wed, 13 Oct 2021 14:31:28 +0000 (14:31 +0000)
unformat_init_vector() expects a vector, not a NULL-terminated C-string.

Type: fix

Change-Id: I20a266243f63d94b0c6fe24e25ee8346c08c8ff2
Signed-off-by: Benoît Ganne <bganne@cisco.com>
src/plugins/dpdk/device/init.c
src/vppinfra/format.h
src/vppinfra/unformat.c

index b64f76b..f9927db 100644 (file)
@@ -287,14 +287,15 @@ dpdk_lib_init (dpdk_main_t * dm)
       if (vmbus_dev)
        {
          unformat_input_t input_vmbus;
-
-         unformat_init_vector (&input_vmbus, (u8 *) dev_info.device->name);
+         unformat_init_string (&input_vmbus, dev_info.device->name,
+                               strlen (dev_info.device->name));
          if (unformat (&input_vmbus, "%U", unformat_vlib_vmbus_addr,
                        &vmbus_addr))
            {
              p = mhash_get (&dm->conf->device_config_index_by_vmbus_addr,
                             &vmbus_addr);
            }
+         unformat_free (&input_vmbus);
        }
 
       if (p)
index 70882ad..cad9b0e 100644 (file)
@@ -242,8 +242,8 @@ uword va_unformat (unformat_input_t * i, const char *fmt, va_list * args);
 void unformat_init_command_line (unformat_input_t * input, char *argv[]);
 
 /* Setup for unformat of given string. */
-void unformat_init_string (unformat_input_t * input,
-                          char *string, int string_len);
+void unformat_init_string (unformat_input_t *input, const char *string,
+                          int string_len);
 
 always_inline void
 unformat_init_cstring (unformat_input_t * input, char *string)
index 172182f..0f6da4f 100644 (file)
@@ -1026,7 +1026,8 @@ unformat_init_command_line (unformat_input_t * input, char *argv[])
 }
 
 __clib_export void
-unformat_init_string (unformat_input_t * input, char *string, int string_len)
+unformat_init_string (unformat_input_t *input, const char *string,
+                     int string_len)
 {
   unformat_init (input, 0, 0);
   if (string_len > 0)