c11 safe string handling support
[vpp.git] / src / plugins / memif / memif.c
index e35a8dc..763572c 100644 (file)
@@ -460,7 +460,7 @@ memif_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
   clib_error_t *err;
 
   sock = clib_mem_alloc (sizeof (clib_socket_t));
-  memset (sock, 0, sizeof (clib_socket_t));
+  clib_memset (sock, 0, sizeof (clib_socket_t));
 
   while (1)
     {
@@ -511,7 +511,7 @@ memif_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
 
          if (mif->flags & MEMIF_IF_FLAG_IS_SLAVE)
            {
-              memset (sock, 0, sizeof(clib_socket_t));
+              clib_memset (sock, 0, sizeof(clib_socket_t));
              sock->config = (char *) msf->filename;
               sock->flags = CLIB_SOCKET_F_IS_CLIENT| CLIB_SOCKET_F_SEQPACKET;
 
@@ -576,7 +576,7 @@ memif_add_socket_file (u32 sock_id, u8 * socket_filename)
     }
 
   pool_get (mm->socket_files, msf);
-  memset (msf, 0, sizeof (memif_socket_file_t));
+  clib_memset (msf, 0, sizeof (memif_socket_file_t));
 
   msf->filename = socket_filename;
   msf->socket_id = sock_id;
@@ -618,7 +618,6 @@ memif_delete_socket_file (u32 sock_id)
 int
 memif_socket_filename_add_del (u8 is_add, u32 sock_id, u8 * sock_filename)
 {
-  struct stat file_stat;
   char *dir = 0, *tmp;
   u32 idx = 0;
 
@@ -680,8 +679,11 @@ memif_socket_filename_add_del (u8 is_add, u32 sock_id, u8 * sock_filename)
          vec_add1 (dir, '\0');
        }
 
-      if (((dir == 0) || (stat (dir, &file_stat) == -1)
-          || (!S_ISDIR (file_stat.st_mode))) && (idx != 0))
+      /* check dir existance and access rights for effective user/group IDs */
+      if ((dir == NULL)
+         ||
+         (faccessat ( /* ignored */ -1, dir, F_OK | R_OK | W_OK, AT_EACCESS)
+          < 0))
        {
          vec_free (dir);
          return VNET_API_ERROR_INVALID_ARGUMENT;
@@ -754,7 +756,7 @@ memif_delete_if (vlib_main_t * vm, memif_if_t * mif)
        }
     }
 
-  memset (mif, 0, sizeof (*mif));
+  clib_memset (mif, 0, sizeof (*mif));
   pool_put (mm->interfaces, mif);
 
   if (pool_elts (mm->interfaces) == 0)
@@ -873,7 +875,7 @@ memif_create_if (vlib_main_t * vm, memif_create_if_args_t * args)
     }
 
   pool_get (mm->interfaces, mif);
-  memset (mif, 0, sizeof (*mif));
+  clib_memset (mif, 0, sizeof (*mif));
   mif->dev_instance = mif - mm->interfaces;
   mif->socket_file_index = msf - mm->socket_files;
   mif->id = args->id;
@@ -942,7 +944,7 @@ memif_create_if (vlib_main_t * vm, memif_create_if_args_t * args)
       ASSERT (msf->sock == 0);
       msf->sock = s;
 
-      memset (s, 0, sizeof (clib_socket_t));
+      clib_memset (s, 0, sizeof (clib_socket_t));
       s->config = (char *) msf->filename;
       s->flags = CLIB_SOCKET_F_IS_SERVER |
        CLIB_SOCKET_F_ALLOW_GROUP_WRITE |
@@ -1017,7 +1019,7 @@ memif_init (vlib_main_t * vm)
 {
   memif_main_t *mm = &memif_main;
 
-  memset (mm, 0, sizeof (memif_main_t));
+  clib_memset (mm, 0, sizeof (memif_main_t));
 
   mm->log_class = vlib_log_register_class ("memif_plugin", 0);
   memif_log_debug (0, "initialized");