Print this page
11506 smatch resync


 177 static void release_function_indicator(const char *name)
 178 {
 179         if (!option_info)
 180                 return;
 181         add_function_hook(name, &print_unwind_functions, INT_PTR(0));
 182 }
 183 
 184 void check_unwind(int id)
 185 {
 186         if (option_project != PROJ_KERNEL || !option_spammy)
 187                 return;
 188         my_id = id;
 189 
 190         register_unwind_functions();
 191 
 192         return_implies_state("request_resource", 0, 0, &request_granted, INT_PTR(1));
 193         return_implies_state("request_resource", -EBUSY, -EBUSY, &request_denied, INT_PTR(1));
 194         add_function_hook("release_resource", &match_release, INT_PTR(0));
 195         release_function_indicator("release_resource");
 196 
 197         return_implies_state("__request_region", valid_ptr_min, valid_ptr_max, &request_granted, INT_PTR(1));
 198         return_implies_state("__request_region", 0, 0, &request_denied, INT_PTR(1));
 199         add_function_hook("__release_region", &match_release, INT_PTR(1));
 200         release_function_indicator("__release_region");
 201 
 202         return_implies_state("ioremap", valid_ptr_min, valid_ptr_max, &request_granted, INT_PTR(-1));
 203         return_implies_state("ioremap", 0, 0, &request_denied, INT_PTR(-1));
 204         add_function_hook("iounmap", &match_release, INT_PTR(0));
 205 
 206         return_implies_state("pci_iomap", valid_ptr_min, valid_ptr_max, &request_granted, INT_PTR(-1));
 207         return_implies_state("pci_iomap", 0, 0, &request_denied, INT_PTR(-1));
 208         add_function_hook("pci_iounmap", &match_release, INT_PTR(1));
 209         release_function_indicator("pci_iounmap");
 210 
 211         return_implies_state("__create_workqueue_key", valid_ptr_min, valid_ptr_max, &request_granted,
 212                         INT_PTR(-1));
 213         return_implies_state("__create_workqueue_key", 0, 0, &request_denied, INT_PTR(-1));
 214         add_function_hook("destroy_workqueue", &match_release, INT_PTR(0));
 215 
 216         return_implies_state("request_irq", 0, 0, &request_granted, INT_PTR(0));
 217         return_implies_state("request_irq", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
 218         add_function_hook("free_irq", &match_release, INT_PTR(0));
 219         release_function_indicator("free_irq");
 220 
 221         return_implies_state("register_netdev", 0, 0, &request_granted, INT_PTR(0));
 222         return_implies_state("register_netdev", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
 223         add_function_hook("unregister_netdev", &match_release, INT_PTR(0));
 224         release_function_indicator("unregister_netdev");
 225 
 226         return_implies_state("misc_register", 0, 0, &request_granted, INT_PTR(0));
 227         return_implies_state("misc_register", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
 228         add_function_hook("misc_deregister", &match_release, INT_PTR(0));
 229         release_function_indicator("misc_deregister");
 230 
 231 
 232         add_hook(&match_return, RETURN_HOOK);
 233 }


 177 static void release_function_indicator(const char *name)
 178 {
 179         if (!option_info)
 180                 return;
 181         add_function_hook(name, &print_unwind_functions, INT_PTR(0));
 182 }
 183 
 184 void check_unwind(int id)
 185 {
 186         if (option_project != PROJ_KERNEL || !option_spammy)
 187                 return;
 188         my_id = id;
 189 
 190         register_unwind_functions();
 191 
 192         return_implies_state("request_resource", 0, 0, &request_granted, INT_PTR(1));
 193         return_implies_state("request_resource", -EBUSY, -EBUSY, &request_denied, INT_PTR(1));
 194         add_function_hook("release_resource", &match_release, INT_PTR(0));
 195         release_function_indicator("release_resource");
 196 
 197         return_implies_state_sval("__request_region", valid_ptr_min_sval, valid_ptr_max_sval, &request_granted, INT_PTR(1));
 198         return_implies_state("__request_region", 0, 0, &request_denied, INT_PTR(1));
 199         add_function_hook("__release_region", &match_release, INT_PTR(1));
 200         release_function_indicator("__release_region");
 201 
 202         return_implies_state_sval("ioremap", valid_ptr_min_sval, valid_ptr_max_sval, &request_granted, INT_PTR(-1));
 203         return_implies_state("ioremap", 0, 0, &request_denied, INT_PTR(-1));
 204         add_function_hook("iounmap", &match_release, INT_PTR(0));
 205 
 206         return_implies_state_sval("pci_iomap", valid_ptr_min_sval, valid_ptr_max_sval, &request_granted, INT_PTR(-1));
 207         return_implies_state("pci_iomap", 0, 0, &request_denied, INT_PTR(-1));
 208         add_function_hook("pci_iounmap", &match_release, INT_PTR(1));
 209         release_function_indicator("pci_iounmap");
 210 
 211         return_implies_state_sval("__create_workqueue_key", valid_ptr_min_sval, valid_ptr_max_sval, &request_granted,
 212                         INT_PTR(-1));
 213         return_implies_state("__create_workqueue_key", 0, 0, &request_denied, INT_PTR(-1));
 214         add_function_hook("destroy_workqueue", &match_release, INT_PTR(0));
 215 
 216         return_implies_state("request_irq", 0, 0, &request_granted, INT_PTR(0));
 217         return_implies_state("request_irq", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
 218         add_function_hook("free_irq", &match_release, INT_PTR(0));
 219         release_function_indicator("free_irq");
 220 
 221         return_implies_state("register_netdev", 0, 0, &request_granted, INT_PTR(0));
 222         return_implies_state("register_netdev", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
 223         add_function_hook("unregister_netdev", &match_release, INT_PTR(0));
 224         release_function_indicator("unregister_netdev");
 225 
 226         return_implies_state("misc_register", 0, 0, &request_granted, INT_PTR(0));
 227         return_implies_state("misc_register", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
 228         add_function_hook("misc_deregister", &match_release, INT_PTR(0));
 229         release_function_indicator("misc_deregister");
 230 

 231         add_hook(&match_return, RETURN_HOOK);
 232 }