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);