Print this page
11506 smatch resync


  96         if (!is_error_return(ret_value))
  97                 return;
  98         check_for_held();
  99 }
 100 
 101 static void register_returns_held_funcs(void)
 102 {
 103         struct token *token;
 104         const char *func;
 105 
 106         token = get_tokens_file("kernel.returns_held_funcs");
 107         if (!token)
 108                 return;
 109         if (token_type(token) != TOKEN_STREAMBEGIN)
 110                 return;
 111         token = token->next;
 112         while (token_type(token) != TOKEN_STREAMEND) {
 113                 if (token_type(token) != TOKEN_IDENT)
 114                         return;
 115                 func = show_ident(token->ident);
 116                 return_implies_state(func, valid_ptr_min, valid_ptr_max,
 117                                      &match_returns_held, NULL);
 118                 return_implies_state(func, 0, 0, &match_returns_null,
 119                                          NULL);
 120                 token = token->next;
 121         }
 122         clear_token_alloc();
 123 }
 124 
 125 void check_held_dev(int id)
 126 {
 127         if (option_project != PROJ_KERNEL)
 128                 return;
 129 
 130         my_id = id;
 131         add_function_hook("dev_hold", &match_dev_hold, NULL);
 132         add_function_hook("dev_put", &match_dev_put, NULL);
 133         register_returns_held_funcs();
 134         add_hook(&match_return, RETURN_HOOK);
 135 }


  96         if (!is_error_return(ret_value))
  97                 return;
  98         check_for_held();
  99 }
 100 
 101 static void register_returns_held_funcs(void)
 102 {
 103         struct token *token;
 104         const char *func;
 105 
 106         token = get_tokens_file("kernel.returns_held_funcs");
 107         if (!token)
 108                 return;
 109         if (token_type(token) != TOKEN_STREAMBEGIN)
 110                 return;
 111         token = token->next;
 112         while (token_type(token) != TOKEN_STREAMEND) {
 113                 if (token_type(token) != TOKEN_IDENT)
 114                         return;
 115                 func = show_ident(token->ident);
 116                 return_implies_state_sval(func, valid_ptr_min_sval, valid_ptr_max_sval,
 117                                      &match_returns_held, NULL);
 118                 return_implies_state(func, 0, 0, &match_returns_null,
 119                                          NULL);
 120                 token = token->next;
 121         }
 122         clear_token_alloc();
 123 }
 124 
 125 void check_held_dev(int id)
 126 {
 127         if (option_project != PROJ_KERNEL)
 128                 return;
 129 
 130         my_id = id;
 131         add_function_hook("dev_hold", &match_dev_hold, NULL);
 132         add_function_hook("dev_put", &match_dev_put, NULL);
 133         register_returns_held_funcs();
 134         add_hook(&match_return, RETURN_HOOK);
 135 }