Print this page
smatch: check libld_* allocation functions

@@ -44,17 +44,10 @@
 STATE(allocated);
 STATE(ok);
 
 static void set_parent(struct expression *expr, struct smatch_state *state);
 
-static const char *allocation_funcs[] = {
-        "malloc",
-        "kmalloc",
-        "kzalloc",
-        "kmemdup",
-};
-
 static char *alloc_parent_str(struct symbol *sym)
 {
         static char buf[256];
 
         if (!sym || !sym->ident)

@@ -251,16 +244,26 @@
         check_for_allocated();
 }
 
 void check_leaks(int id)
 {
-        int i;
-
         my_id = id;
 
-        for (i = 0; i < ARRAY_SIZE(allocation_funcs); i++)
-                add_function_assign_hook(allocation_funcs[i], &match_alloc, NULL);
+        switch (option_project) {
+        case PROJ_KERNEL:
+                add_function_assign_hook("kmalloc", &match_alloc, NULL);
+                add_function_assign_hook("kzalloc", &match_alloc, NULL);
+                add_function_assign_hook("kmemdup", &match_alloc, NULL);
+                break;
+        case PROJ_ILLUMOS_USER:
+                add_function_assign_hook("libld_malloc", &match_alloc, NULL);
+                add_function_assign_hook("libld_calloc", &match_alloc, NULL);
+                /* FALLTHROUGH */
+        default:
+                add_function_assign_hook("malloc", &match_alloc, NULL);
+                add_function_assign_hook("calloc", &match_alloc, NULL);
+        }
 
         add_hook(&match_condition, CONDITION_HOOK);
 
         add_hook(&match_function_call, FUNCTION_CALL_HOOK);
         add_hook(&match_assign, ASSIGNMENT_HOOK);