svm: asan: fix asan support
[vpp.git] / src / svm / svm.c
index c702625..20f4b7a 100644 (file)
@@ -107,7 +107,7 @@ region_lock (svm_region_t * rp, int tag)
   rp->mutex_owner_pid = getpid ();
   rp->mutex_owner_tag = tag;
 #endif
-  ASSERT (nheld < MAXLOCK);
+  ASSERT (nheld < MAXLOCK);    //NOSONAR
   /*
    * Keep score of held mutexes so we can try to exit
    * cleanly if the world comes to an end at the worst possible
@@ -329,6 +329,7 @@ svm_data_region_create (svm_map_region_args_t * a, svm_region_t * rp)
          return -3;
        }
       close (fd);
+      CLIB_MEM_UNPOISON (rp->data_base, map_size);
       rp->backing_file = (char *) format (0, "%s\0", a->backing_file);
       rp->flags |= SVM_FLAGS_FILE;
     }
@@ -414,6 +415,7 @@ svm_data_region_map (svm_map_region_args_t * a, svm_region_t * rp)
          return -3;
        }
       close (fd);
+      CLIB_MEM_UNPOISON (rp->data_base, map_size);
     }
   return 0;
 }
@@ -607,6 +609,7 @@ svm_map_region (svm_map_region_args_t * a)
          return (0);
        }
       close (svm_fd);
+      CLIB_MEM_UNPOISON (rp, a->size);
 
       svm_region_init_mapped_region (a, rp);
 
@@ -663,6 +666,9 @@ svm_map_region (svm_map_region_args_t * a)
          clib_warning ("mmap");
          return (0);
        }
+
+      CLIB_MEM_UNPOISON (rp, MMAP_PAGESIZE);
+
       /*
        * We lost the footrace to create this region; make sure
        * the winner has crossed the finish line.
@@ -699,6 +705,8 @@ svm_map_region (svm_map_region_args_t * a)
 
       close (svm_fd);
 
+      CLIB_MEM_UNPOISON (rp, a->size);
+
       if ((uword) rp != rp->virtual_base)
        {
          clib_warning ("mmap botch");
@@ -746,7 +754,7 @@ svm_map_region (svm_map_region_args_t * a)
       return ((void *) rp);
 
     }
-  return 0;                    /* NOTREACHED */
+  return 0;                    /* NOTREACHED *///NOSONAR
 }
 
 static void
@@ -755,7 +763,7 @@ svm_mutex_cleanup (void)
   int i;
   for (i = 0; i < nheld; i++)
     {
-      pthread_mutex_unlock (mutexes_held[i]);
+      pthread_mutex_unlock (mutexes_held[i]);  //NOSONAR
     }
 }
 
@@ -1042,6 +1050,7 @@ svm_region_unmap_internal (void *rp_arg, u8 is_client)
   oldheap = svm_push_pvt_heap (rp);    /* nb vec_delete() in the loop */
 
   /* Remove the caller from the list of mappers */
+  CLIB_MEM_UNPOISON (rp->client_pids, vec_bytes (rp->client_pids));
   for (i = 0; i < vec_len (rp->client_pids); i++)
     {
       if (rp->client_pids[i] == mypid)
@@ -1174,6 +1183,7 @@ svm_region_exit_internal (u8 is_client)
   virtual_base = root_rp->virtual_base;
   virtual_size = root_rp->virtual_size;
 
+  CLIB_MEM_UNPOISON (root_rp->client_pids, vec_bytes (root_rp->client_pids));
   for (i = 0; i < vec_len (root_rp->client_pids); i++)
     {
       if (root_rp->client_pids[i] == mypid)