session: fix non-NULL terminated string 01/33701/2
authorBenoît Ganne <bganne@cisco.com>
Thu, 9 Sep 2021 10:00:00 +0000 (12:00 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Thu, 9 Sep 2021 14:18:27 +0000 (14:18 +0000)
vlib_unix_recursive_mkdir () expects a NULL-terminated C-string.

Type: fix

Change-Id: I412b48443d0792307d611c466747c0aa5e423417
Signed-off-by: Benoît Ganne <bganne@cisco.com>
src/vnet/session/session_api.c

index e6aac95..371fcfc 100644 (file)
@@ -1720,26 +1720,21 @@ appns_sapi_add_ns_socket (app_namespace_t * app_ns)
   struct stat file_stat;
   clib_error_t *err;
   clib_socket_t *cs;
-  u8 *dir = 0;
-  int rv = 0;
-
-  vec_add (dir, vlib_unix_get_runtime_dir (),
-          strlen (vlib_unix_get_runtime_dir ()));
-  vec_add (dir, (u8 *) subdir, strlen (subdir));
+  char dir[4096];
 
+  snprintf (dir, sizeof (dir), "%s%s", vlib_unix_get_runtime_dir (), subdir);
   err = vlib_unix_recursive_mkdir ((char *) dir);
   if (err)
     {
       clib_error_report (err);
-      rv = -1;
-      goto error;
+      return -1;
     }
 
   /* Use abstract sockets if a netns was provided */
   if (app_ns->netns)
     app_ns->sock_name = format (0, "@vpp/session/%v%c", app_ns->ns_id, 0);
   else
-    app_ns->sock_name = format (0, "%v%v%c", dir, app_ns->ns_id, 0);
+    app_ns->sock_name = format (0, "%s%v%c", dir, app_ns->ns_id, 0);
 
   /*
    * Create and initialize socket to listen on
@@ -1753,15 +1748,11 @@ appns_sapi_add_ns_socket (app_namespace_t * app_ns)
   if ((err = clib_socket_init_netns (cs, app_ns->netns)))
     {
       clib_error_report (err);
-      rv = -1;
-      goto error;
+      return -1;
     }
 
   if (!app_ns->netns && stat ((char *) app_ns->sock_name, &file_stat) == -1)
-    {
-      rv = -1;
-      goto error;
-    }
+    return -1;
 
   /*
    * Start polling it
@@ -1779,9 +1770,7 @@ appns_sapi_add_ns_socket (app_namespace_t * app_ns)
   handle->aah_file_index = clib_file_add (&file_main, &cf);
   handle->aah_app_wrk_index = APP_INVALID_INDEX;
 
-error:
-  vec_free (dir);
-  return rv;
+  return 0;
 }
 
 static void