Print this page
smatch: check libld_* allocation functions

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/check_leaks.c
          +++ new/usr/src/tools/smatch/src/check_leaks.c
↓ open down ↓ 38 lines elided ↑ open up ↑
  39   39  #include "smatch.h"
  40   40  #include "smatch_slist.h"
  41   41  
  42   42  static int my_id;
  43   43  
  44   44  STATE(allocated);
  45   45  STATE(ok);
  46   46  
  47   47  static void set_parent(struct expression *expr, struct smatch_state *state);
  48   48  
  49      -static const char *allocation_funcs[] = {
  50      -        "malloc",
  51      -        "kmalloc",
  52      -        "kzalloc",
  53      -        "kmemdup",
  54      -};
  55      -
  56   49  static char *alloc_parent_str(struct symbol *sym)
  57   50  {
  58   51          static char buf[256];
  59   52  
  60   53          if (!sym || !sym->ident)
  61   54                  return NULL;
  62   55  
  63   56          snprintf(buf, 255, "%s", sym->ident->name);
  64   57          buf[255] = '\0';
  65   58          return alloc_string(buf);
↓ open down ↓ 180 lines elided ↑ open up ↑
 246  239  
 247  240  static void match_end_func(struct symbol *sym)
 248  241  {
 249  242          if (__inline_fn)
 250  243                  return;
 251  244          check_for_allocated();
 252  245  }
 253  246  
 254  247  void check_leaks(int id)
 255  248  {
 256      -        int i;
 257      -
 258  249          my_id = id;
 259  250  
 260      -        for (i = 0; i < ARRAY_SIZE(allocation_funcs); i++)
 261      -                add_function_assign_hook(allocation_funcs[i], &match_alloc, NULL);
 262      -
      251 +        switch (option_project) {
      252 +        case PROJ_KERNEL:
      253 +                add_function_assign_hook("kmalloc", &match_alloc, NULL);
      254 +                add_function_assign_hook("kzalloc", &match_alloc, NULL);
      255 +                add_function_assign_hook("kmemdup", &match_alloc, NULL);
      256 +                break;
      257 +        case PROJ_ILLUMOS_USER:
      258 +                add_function_assign_hook("libld_malloc", &match_alloc, NULL);
      259 +                add_function_assign_hook("libld_calloc", &match_alloc, NULL);
      260 +                /* FALLTHROUGH */
      261 +        default:
      262 +                add_function_assign_hook("malloc", &match_alloc, NULL);
      263 +                add_function_assign_hook("calloc", &match_alloc, NULL);
      264 +        }
      265 +        
 263  266          add_hook(&match_condition, CONDITION_HOOK);
 264  267  
 265  268          add_hook(&match_function_call, FUNCTION_CALL_HOOK);
 266  269          add_hook(&match_assign, ASSIGNMENT_HOOK);
 267  270  
 268  271          add_hook(&match_return, RETURN_HOOK);
 269  272          add_hook(&match_end_func, END_FUNC_HOOK);
 270  273  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX