From a25871448d0400d53ec0431097b6f004f91fb012 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 26 Mar 2009 13:14:31 +0300 Subject: [PATCH] Save function lists in smatch_data/ Eventually this should go under lib/ somewhere. Signed-off-by: Dan Carpenter --- Makefile | 3 +- check_memory.c | 8 +- smatch.c | 7 +- smatch.h | 6 + smatch_data/kernel.frees_argument | 794 ++++++++++++++++++++++++++++++++++++++ smatch_files.c | 48 +++ smatch_scripts/gen_frees_list.sh | 5 +- 7 files changed, 862 insertions(+), 9 deletions(-) create mode 100644 smatch_data/kernel.frees_argument create mode 100644 smatch_files.c diff --git a/Makefile b/Makefile index 837e18b6..d66f83d7 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ PKGCONFIGDIR=$(LIBDIR)/pkgconfig PROGRAMS=test-lexing test-parsing obfuscate compile graph sparse test-linearize example \ test-unssa test-dissect ctags smatch -SMATCH_FILES=smatch_flow.o smatch_conditions.o smatch_slist.o smatch_states.o smatch_helper.o smatch_hooks.o smatch_function_hooks.o smatch_extra.o smatch_implied.o smatch_ignore.o smatch_tracker.o +SMATCH_FILES=smatch_flow.o smatch_conditions.o smatch_slist.o smatch_states.o smatch_helper.o smatch_hooks.o smatch_function_hooks.o smatch_extra.o smatch_implied.o smatch_ignore.o smatch_tracker.o smatch_files.o SMATCH_CHECKS=$(shell ls check_*.c | sed -e 's/\.c/.o/') @@ -174,6 +174,7 @@ smatch_extra.o: $(LIB_H) smatch.h smatch_implied.o: $(LIB_H) smatch.h smatch_slist.h smatch_ignore.o: $(LIB_H) smatch.h smatch_tracker.o: $(LIB_H) smatch.h +smatch_files.o: $(LIB_H) smatch.h smatch_hooks.o: $(LIB_H) smatch.h smatch_function_hooks.o: $(LIB_H) smatch.h smatch_helper.o: $(LIB_H) smatch.h diff --git a/check_memory.c b/check_memory.c index 2854f6db..136491a3 100644 --- a/check_memory.c +++ b/check_memory.c @@ -340,17 +340,13 @@ static void match_end_func(struct symbol *sym) static void register_funcs_from_file(void) { - const char *filename = "frees"; - int fd; struct token *token; const char *func; int arg; - fd = open(filename, O_RDONLY); - if (fd < 0) + token = get_tokens_file("kernel.frees_argument"); + if (!token) return; - token = tokenize(filename, fd, NULL, NULL); - close(fd); if (token_type(token) != TOKEN_STREAMBEGIN) return; token = token->next; diff --git a/smatch.c b/smatch.c index 1a8c9095..f53f72d9 100644 --- a/smatch.c +++ b/smatch.c @@ -8,8 +8,11 @@ */ #include +#include #include "smatch.h" +char *bin_dir; + typedef void (*reg_func) (int id); void register_smatch_extra(int id); void register_smatch_ignore(int id); @@ -55,7 +58,9 @@ int main(int argc, char **argv) { int i; reg_func func; - + + bin_dir = dirname(alloc_string(argv[0])); + /* The script IDs start at 1. 0 is used for internal stuff. */ create_function_hash(); diff --git a/smatch.h b/smatch.h index 279d9bff..52e3aa7f 100644 --- a/smatch.h +++ b/smatch.h @@ -259,4 +259,10 @@ DECLARE_PTR_LIST(call_back_list, struct fcall_back); void create_function_hash(void); void __match_initializer_call(struct symbol *sym); +/* smatch_files.c */ +struct token *get_tokens_file(const char *filename); + +/* smatch.c */ +extern char *bin_dir; + #endif /* !SMATCH_H_ */ diff --git a/smatch_data/kernel.frees_argument b/smatch_data/kernel.frees_argument new file mode 100644 index 00000000..cdf8536b --- /dev/null +++ b/smatch_data/kernel.frees_argument @@ -0,0 +1,794 @@ +// list of functions and the argument they free. +// generated by `gen_frees_list.sh` +aac_close_fib_context 1 +__aarp_expire 0 +aca_put 0 +acm_tty_unregister 0 +acpi_ds_delete_walk_state 0 +acpi_ev_delete_gpe_block 0 +acpi_ev_delete_gpe_xrupt 0 +acpi_ut_delete_internal_object_list 0 +adapter_remove_and_free_device 1 +adpt_i2o_delete_hba 0 +adu_delete 0 +aead_geniv_free 0 +aem_delete 0 +aer_delete_rootport 0 +afs_cell_destroy 0 +afs_destroy_server 0 +afs_free_call 0 +afs_free_writeback 0 +afs_put_volume 0 +afs_vlocation_destroy 0 +agp_free_memory 0 +agp_generic_free_by_type 0 +agp_put_bridge 0 +agp_remove_controller 0 +ahc_alloc 1 +ahc_dma_tag_destroy 1 +ahc_free 0 +ahd_alloc 1 +ahd_dma_tag_destroy 1 +ahd_free 0 +aoedev_freedev 0 +ap_free_sta 1 +argv_free 0 +ata_sas_port_destroy 0 +ath5k_hw_detach 0 +ath9k_hw_detach 0 +atm_mpoa_delete_qos 0 +audit_buffer_free 0 +audit_put_nd 0 +audit_put_nd 1 +audit_put_watch 0 +autofs4_free_ino 0 +autofs_hash_delete 0 +avmcard_dma_free 0 +__ax25_put_route 0 +azx_free 0 +b1_free_card 0 +b43_destroy_dmaring 0 +b43_destroy_pioqueue_rx 0 +b43_destroy_pioqueue_tx 0 +b43legacy_destroy_dmaring 0 +b43legacy_destroy_pioqueue 0 +bcm_remove_op 0 +bio_free_map_data 0 +bio_kmalloc_destructor 0 +bioset_free 0 +bitmap_free 0 +bitmap_free_page 1 +__blk_free_tags 0 +blk_queue_init_tags 2 +blk_trace_cleanup 0 +block2mtd_free_device 0 +br2684_close_vcc 0 +brd_free 0 +bridge_slot_remove 0 +bsg_put_device 0 +btrfs_free_fs_root 1 +btrfs_free_leaf_ref 1 +btrfs_parse_options 1 +btrfs_recover_log_trees 0 +c101_destroy_card 0 +c2_dealloc_pd 0 +c2_dealloc_ucontext 0 +c2port_device_unregister 0 +call_usermodehelper_freeinfo 0 +capidev_free 0 +capiminor_free 0 +cas_page_free 1 +cat_destroy 0 +cat_destroy 1 +cbq_destroy_class 1 +cdebbuf_free 0 +cfg80211_dev_free 0 +cfi_amdstd_setup 0 +cfi_intelext_setup 0 +cifs_demultiplex_thread 0 +cipso_v4_cache_entry_free 0 +cipso_v4_doi_free 0 +class_create_release 0 +class_pktcdvd_release 0 +cleanup 0 +cleanup_bridge 0 +cleanup_one_si 0 +close_bwqcam 0 +close_cqcam 0 +cls_destroy 0 +cls_destroy 1 +clusterip_seq_next 1 +clusterip_seq_stop 1 +cm109_usb_cleanup 0 +cm_create_port_fs 0 +cm_free_work 0 +cmtp_application_del 1 +cn_queue_free_callback 0 +cn_queue_free_dev 0 +coalesced_mmio_destructor 0 +collect_one_slot 0 +common_destroy 0 +common_destroy 1 +complete_agent_reset_write_no_wait 4 +complete_request_key 0 +cond_destroy_bool 0 +cond_destroy_bool 1 +cond_node_destroy 0 +con_unify_unimap 1 +cpia_unregister_camera 0 +cryptd_free 0 +crypto_authenc_free 0 +crypto_cbc_free 0 +crypto_ccm_free 0 +crypto_ctr_free 0 +crypto_cts_free 0 +crypto_ecb_free 0 +crypto_free_tfm 0 +crypto_gcm_free 0 +crypto_pcbc_free 0 +crypto_rfc4106_free 0 +crypto_rfc4309_free 0 +csr1212_destroy_csr 0 +csr1212_remove_cache 1 +cstate_free 0 +cx88_core_put 0 +cxgb3i_ddp_release_gl 0 +cxgb_free_mem 0 +cxio_hal_destroy_resource 0 +cyberpro_free_fb_info 0 +cypress_buf_free 0 +DAC960_DetectCleanup 0 +db9_remove 0 +dccp_feat_entry_destructor 0 +dcookie_unregister 0 +decoder_detach 0 +delete_adapter 0 +__delete_addr 0 +delete_attr_set 0 +destroy_8023_client 0 +destroy_EII_client 0 +destroy_header_iter 0 +destroy_log_context 0 +destroy_rmpp_recv 0 +destroy_sv 0 +destroy_workqueue 0 +device_create_release 0 +direct_io_worker 9 +display_device_unregister 0 +dlm_free_ctxt_mem 0 +dlm_free_lvb 0 +dlm_free_pagevec 0 +dlm_free_rsb 0 +dlm_mig_lockres_worker 1 +dlm_user_cancel 1 +dlm_user_convert 1 +dlm_user_request 1 +dlm_user_unlock 1 +dl_seq_next 1 +dma_pool_destroy 0 +dmatest_cleanup_channel 0 +dma_unpin_iovec_pages 0 +dm_dirty_log_destroy 0 +dm_io_client_destroy 0 +dm_kcopyd_client_destroy 0 +dm_region_hash_destroy 0 +dm_table_destroy 0 +dn_fib_free_info 0 +DoC2k_init 0 +dock_remove 0 +DoCMil_init 0 +DoCMilPlus_init 0 +do_send_packet 1 +drm_mode_destroy 1 +drm_mode_remove 1 +drm_pci_free 1 +drm_property_destroy 1 +drm_property_destroy_blob 1 +drm_realloc 0 +drr_destroy_class 1 +dsp_cmx_del_conf 0 +ds_release_bts 0 +ds_release_pebs 0 +dst_attach 0 +dummy_free 0 +dvb_unregister_device 0 +dvb_usb_exit 0 +dynamic_kobj_release 0 +ebt_register_table 1 +ebt_unregister_table 0 +ecryptfs_exorcise_daemon 0 +edac_pci_release_main_kobj 0 +edge_buf_free 0 +efx_tsoh_heap_free 1 +eg_cache_put 0 +ep_free 0 +eql_kill_one_slave 1 +erase_callback 0 +erase_worker 1 +evbug_disconnect 0 +ext3_htree_free_dir_info 0 +ext4_ext_find_extent 2 +ext4_htree_free_dir_info 0 +fb_destroy_modedb 0 +fc_disc_single 1 +fc_exch_mgr_free 0 +fib_hash_free 0 +finish_request 1 +flexcop_device_kfree 0 +fl_free 0 +flow_destroy_filter 1 +framebuffer_release 0 +frame_delete 0 +free 0 +free_as_io_context 0 +free_async 0 +free_bd_holder 0 +free_bitmap 1 +free_bprm 0 +free_cell 0 +free_chunk 0 +free_cm_id 0 +free_context 0 +free_cpumask_var 0 +free_dca_provider 0 +free_dev 0 +free_dma_iso_ctx 0 +free_ebda_hpc 0 +free_entry 0 +free_fib_info 0 +free_fs_devices 0 +free_fw 0 +free_keyval 0 +free_kmem_cache_cpu 0 +free_locked_buffer 0 +free_msg 0 +free_multipath 0 +free_ncci 1 +free_notes_attrs 0 +free_param_target 0 +free_pending_request 0 +free_pgpath 0 +free_pg_vec 0 +__free_pipe_info 0 +free_pi_state 0 +free_pl 0 +free_plci 1 +free_pool 0 +free_port 0 +free_priority_group 0 +free_proc_entry 0 +free_recv_msg 0 +free_region 0 +free_rootdomain 0 +free_rs 0 +free_sched_group 0 +free_scq 0 +free_scq 1 +free_sect_attrs 0 +free_sglist 0 +free_smi_msg 0 +freetgt 1 +free_trial_cpuset 0 +free_tty_struct 0 +free_urbs 0 +free_usb_address 1 +free_vm_area 0 +free_workspace 0 +ftl_erase_callback 0 +ftl_remove_dev 0 +fuse_file_free 0 +fuse_file_put 0 +fuse_free_conn 0 +fuse_sync_release 1 +fw_dev_release 0 +fw_hdrs_free 0 +fw_send_response 1 +fz_hash_free 0 +gameport_free_event 0 +garp_attr_destroy 1 +gc_remove 0 +gdlm_delete_lp 0 +gen_pool_destroy 0 +gf128mul_free_64k 0 +gigaset_freedriver 0 +groups_free 0 +gss_do_free_ctx 0 +gss_free 0 +gss_free_cred 0 +gss_release_msg 0 +hashbin_delete 0 +hashtab_destroy 0 +hcd_buffer_free 2 +hfs_bnode_free 0 +hfs_btree_close 0 +hfsc_destroy_class 1 +hfsplus_bnode_free 0 +hfsplus_btree_close 0 +hid_free_report 0 +hisax_cs_setup 2 +hmac_free 0 +hpsb_free_packet 0 +hpsb_iso_shutdown 0 +hso_free_device 0 +hso_free_shared_int 0 +htb_destroy_class 1 +i1480u_tx_free 0 +i2400mu_rx 1 +i2c_tiny_usb_free 0 +i2o_block_device_free 0 +i2o_exec_wait_free 0 +ib_dealloc_device 0 +ib_destroy_fmr_pool 0 +ibmpex_bmc_delete 0 +ibmphp_remove_bus 0 +ib_umem_release 0 +ics5342_release 0 +ide_generic_class_release 0 +ide_host_free 0 +__ieee80211_key_destroy 0 +ieee80211_key_free 0 +ieee80211_rx_bss_free 0 +ieee80211_txb_free 0 +ili9320_remove 0 +in_cache_put 0 +in_dev_finish_destroy 0 +inet6_ifa_finish_destroy 0 +inet_frag_destroy 0 +input_free_polled_device 0 +instance_put 0 +intel_i810_free_by_type 0 +ioat_dma_remove 0 +ioc4_load_modules 0 +ipc_free 0 +ip_ma_put 0 +ipoib_cm_tx_destroy 0 +ipoib_mcast_free 0 +ipoib_neigh_free 1 +ip_options_get_finish 2 +ipr_free_ucode_buffer 0 +ip_vs_app_inc_release 0 +__ip_vs_del_dest 0 +__ip_vs_del_service 0 +ipwireless_hardware_free 0 +ipwireless_network_free 0 +ipw_rx_queue_free 1 +__ipxitf_down 0 +__ircomm_close 0 +__ircomm_tty_cleanup 0 +__irda_task_delete 0 +__iriap_close 0 +__irias_delete_attrib 0 +__irias_delete_object 0 +irias_delete_value 0 +__irlap_close 0 +__irlmp_close_lsap 0 +__irttp_close_tsap 0 +isdn_net_realrm 0 +isdn_v110_close 0 +iser_device_try_release 0 +iso_sched_free 1 +iso_stream_put 1 +iwch_free_fastreg_pbl 0 +jbd2_journal_destroy 0 +jffs2_erase_callback 0 +jffs2_free_comprbuf 0 +jffs2_free_full_dirent 0 +journal_destroy 0 +__journal_drop_transaction 1 +kbd_disconnect 0 +key_user_put 0 +kfifo_free 0 +kfree_sgl 2 +kimage_free 0 +kmem_free 0 +kvm_arch_destroy_vm 0 +kvm_free_assigned_device 1 +kvm_mmu_free_page 1 +lapb_free_cb 0 +ld_usb_delete 0 +led_trigger_unregister_simple 0 +lib80211_ccmp_deinit 0 +lib80211_tkip_deinit 0 +lib80211_wep_deinit 0 +llc_sap_close 0 +loop_free 0 +lpfc_destroy_vport_work_array 1 +lpfc_els_free_bpl 1 +lpfc_els_free_data 1 +lpfc_els_hbq_free 1 +lpfc_free_ct_rsp 1 +lpfc_free_fast_evt 1 +lpfc_in_buf_free 1 +mac_destroy 0 +map_destroy 0 +ma_put 0 +matroxfb_crtc2_remove 1 +matroxfb_remove 0 +mb_cache_destroy 0 +mddev_put 0 +mdiobus_free 0 +md_unregister_thread 0 +__mem_cgroup_free 0 +mempool_kfree 0 +__mesh_table_free 0 +meta_delete 0 +mini_cm_dealloc_core 0 +mini_cm_dec_refcnt_listen 1 +minstrel_free 0 +mlx4_free_cmd_mailbox 1 +mlx4_free_icm 1 +mlx4_ib_dealloc_pd 0 +mmc_blk_put 0 +mmu_free_pte_chain 0 +mmu_free_rmap_desc 0 +mpt_adapter_dispose 0 +mptsas_port_delete 1 +mtdblock_remove_dev 0 +mthca_ah_destroy 0 +mthca_cleanup_user_db_tab 2 +mthca_dealloc_pd 0 +mthca_destroy_cq 0 +mthca_destroy_qp 0 +mthca_destroy_srq 0 +mthca_free_icm 1 +mthca_free_icm_table 1 +mthca_free_mailbox 1 +mthca_free_mtt 1 +mv88e1xxx_destroy 0 +mv88x201x_destroy 0 +mvs_free 0 +my3126_destroy 0 +n2_destroy_card 0 +ncp_req_put 0 +neigh_hash_free 0 +neigh_parms_destroy 0 +nes_destroy_adapter 0 +nes_free_cqp_request 1 +nes_setup_virt_qp 1 +netlink_destroy_callback 0 +nf_reinject 0 +nfs3_free_createdata 0 +nfs4_delegreturn_release 0 +nfs4_free_createdata 0 +nfs4_free_lock_state 0 +nfs4_free_open_state 0 +nfs4_put_state_owner 0 +nfs_access_free_entry 0 +nfs_do_free_delegation 0 +nfs_free_client 0 +nfs_free_seqid 0 +nfs_free_server 0 +nfs_free_unlinkdata 0 +n_hdlc_release 0 +nlmclnt_finish_block 0 +nlm_destroy_host 0 +nlm_put_lockowner 0 +nlm_release_call 0 +ns_init_card_error 0 +nsm_release 0 +ocfs2_cluster_disconnect 0 +ocfs2_drop_dentry_lock 1 +ocfs2_finish_quota_recovery 1 +ocfs2_free_alloc_context 0 +ocfs2_free_path 0 +ocfs2_free_quota_recovery 0 +__ocfs2_free_slot_info 0 +ocfs2_free_truncate_context 0 +ocfs2_free_write_ctxt 0 +ocfs2_live_connection_drop 0 +ocfs2_queue_recovery_completion 2 +ocfs2_queue_recovery_completion 3 +ocfs2_xattr_bucket_free 0 +ocontext_destroy 0 +osst_release_request 0 +oti6858_buf_free 0 +ov7670_detach 0 +ovcamchip_detach 0 +p9_client_destroy 0 +p9_conn_destroy 0 +p9_fid_destroy 0 +p9_idpool_destroy 0 +parport_unregister_device 0 +path_free 1 +pcie_release_ctrl 0 +pci_release_bus_bridge_dev 0 +pciserial_remove_ports 0 +pcxhr_chip_free 0 +pcxhr_free 0 +perm_destroy 0 +perm_destroy 1 +__phonet_device_free 0 +phy_device_free 0 +pkt_bio_destructor 0 +pkt_free_packet_data 0 +pktgen_remove_device 1 +pl2303_buf_free 0 +pm3393_destroy 0 +pnp_free_resource 0 +pool_free 1 +pool_free_page 1 +port_delete 1 +port_free 0 +portman_free 0 +ppp_destroy_channel 0 +pppol2tp_tunnel_free 0 +prism2_download_free_data 0 +__put_css_set 0 +__put_mnt_ns 0 +__put_nfs_open_context 0 +pvr2_context_destroy 0 +pvr2_dvb_destroy 0 +pvr2_hdw_destroy 0 +pvr2_ioread_destroy 0 +pvr2_msp3400_detach 0 +pvr2_stream_destroy 0 +pvr2_sysfs_release 0 +pvr2_tuner_detach 0 +pvr2_v4l2_destroy_no_lock 0 +qdisc_class_hash_free 0 +qdisc_put_stab 0 +qla25xx_free_req_que 1 +qla25xx_free_rsp_que 1 +qla2x00_free_que 1 +qla2x00_free_que 2 +qset_free_std 1 +queue_delete 0 +r10bio_pool_free 0 +r1bio_pool_free 0 +rate_control_pid_free_sta 2 +rb_free_cpu_buffer 0 +rdma_destroy_trans 0 +realloc_argv 1 +recent_entry_remove 1 +regulator_put 0 +reiserfs_end_persistent_transaction 0 +relay_destroy_buf 0 +relay_free_page_array 0 +release_and_free_resource 0 +release_card 0 +release_firmware 0 +release_group 0 +release_hw 0 +release_l1 0 +release_l2 0 +release_l3_process 0 +release_port 1 +release_slot 0 +remove_from_rx_queue 1 +rem_ref_cm_node 1 +return_i2c_dev 0 +rfcomm_dev_destruct 0 +rfcomm_dlc_free 0 +rfcomm_session_del 0 +rfkill_disconnect 0 +ring_buffer_free 0 +ring_buffer_read_finish 0 +RIOFreeCmdBlk 0 +role_destroy 0 +role_destroy 1 +rose_remove_neigh 0 +rose_remove_node 0 +rose_remove_route 0 +rpc_free_iostats 0 +rxrpc_cleanup_transport 0 +rxrpc_destroy_connection 0 +rxrpc_put_bundle 1 +saa5249_probe 0 +saa7111_probe 0 +savemem 1 +sbp2_remove_device 0 +sb_register_oss 0 +sb_unload 0 +scsi_finish_async_scan 0 +sctp_association_destroy 0 +sctp_auth_destroy_hmacs 0 +sctp_auth_key_put 0 +sctp_auth_shkey_free 0 +sctp_bind_addr_free 0 +sctp_datamsg_destroy 0 +sctp_endpoint_destroy 0 +sctp_inq_free 0 +sctp_outq_free 0 +sctp_packet_free 0 +sctp_ssnmap_free 0 +sctp_transport_destroy 0 +sctp_ulpq_free 0 +selinux_release_secctx 0 +selinux_xfrm_policy_free 0 +sens_destroy 0 +sens_destroy 1 +serial_buf_free 0 +serial_do_unlink 0 +serio_free_event 0 +serio_raw_cleanup 0 +sesInfoFree 0 +__set_regdom 0 +set_regdom 0 +setup_card 0 +setup_instance 0 +sf_sample_delete 2 +sg_kfree 0 +sg_remove_sfp 0 +__sg_remove_sfp 1 +skcipher_geniv_free 0 +sk_prot_free 1 +slhc_free 0 +slot_remove 0 +slvl_shutdown 0 +smscore_unregister_client 0 +smscore_unregister_device 0 +smsdvb_unregister_client 0 +snd_ac97_bus_free 0 +snd_ac97_free 0 +snd_ad1816a_free 0 +snd_ad1889_free 0 +snd_ak4114_free 0 +snd_ak4117_free 0 +snd_ak4531_free 0 +snd_ali_free 0 +snd_als300_free 0 +snd_atiixp_free 0 +snd_azf3328_free 0 +snd_bt87x_free 0 +snd_ca0106_free 0 +snd_card_do_free 0 +snd_cmipci_free 0 +snd_cs4281_free 0 +snd_cs46xx_free 0 +snd_cs5530_free 0 +snd_cs5535audio_free 0 +snd_ctl_free_one 0 +snd_echo_free 0 +snd_emu10k1_free 0 +snd_emu10k1_fx8010_unregister_irq_handler 1 +snd_emu10k1x_free 0 +snd_emu8000_free 0 +snd_emux_free 0 +snd_ensoniq_free 0 +snd_es1688_free 0 +snd_es18xx_free 0 +snd_es1938_free 0 +snd_es1968_free 0 +snd_es1968_free_memory 1 +snd_fm801_free 0 +snd_gf1_mem_xfree 1 +snd_gus_free 0 +snd_hda_bus_free 0 +snd_hda_codec_free 0 +snd_hwdep_free 0 +snd_i2c_bus_free 0 +snd_i2c_device_free 0 +snd_ice1712_free 0 +snd_info_free_entry 0 +snd_intel8x0_free 0 +snd_korg1212_free 0 +snd_m3_free 0 +snd_midi_channel_free_set 0 +snd_midi_event_free 0 +snd_mixart_chip_free 0 +snd_mixart_free 0 +snd_mts64_free 0 +snd_nm256_free 0 +snd_opl3_free 0 +snd_opl4_free 0 +snd_pcm_free 0 +snd_pcm_oss_release_file 0 +snd_pcm_plugin_free 0 +snd_pdacf_free 0 +snd_rawmidi_free 0 +snd_riptide_free 0 +snd_sbdsp_free 0 +snd_seq_device_free 0 +snd_seq_oss_readq_delete 0 +snd_seq_oss_timer_delete 0 +snd_seq_oss_writeq_delete 0 +snd_sf_free 0 +snd_sonicvibes_free 0 +snd_timer_close 0 +snd_timer_free 0 +snd_trident_free 0 +snd_uart16550_free 0 +snd_usb_audio_free 0 +snd_usb_audio_stream_free 0 +snd_usbmidi_free 0 +snd_usbmidi_in_endpoint_delete 0 +snd_usbmidi_out_endpoint_delete 0 +snd_usb_mixer_free 0 +__snd_util_mem_free 1 +snd_util_memhdr_free 0 +snd_via82xx_free 0 +snd_vt1724_free 0 +snd_vx222_free 0 +snd_wss_free 0 +snd_ymfpci_free 0 +sock_kfree_s 1 +spidev_release 0 +squashfs_cache_delete 0 +srp_free_iu 1 +__sta_info_free 1 +st_release_request 0 +subscr_del 0 +subscr_terminate 0 +subscr_timeout 0 +sv11_shutdown 0 +svc_destroy 0 +svc_exit_thread 0 +sysctl_head_put 0 +t1_espi_destroy 0 +t1_sge_destroy 0 +t1_tp_destroy 0 +tcf_destroy 0 +tcf_hash_destroy 0 +tcf_police_destroy 0 +tconInfoFree 0 +tcp_v4_md5_do_add 2 +tcp_v6_md5_do_add 2 +textsearch_destroy 0 +tgfx_remove 0 +ti_buf_free 0 +tipc_cltr_delete 0 +tipc_disc_stop_link_req 0 +tipc_link_delete 0 +tipc_node_delete 0 +tipc_zone_delete 0 +tlv320aic23_codec_probe 0 +tnc_delete 1 +try_smi_init 0 +tty_audit_buf_free 0 +tty_buffer_free 1 +type_destroy 0 +type_destroy 1 +u32_destroy_hnode 1 +u32_destroy_key 1 +ub_cleanup 0 +ubh_brelse 0 +ubi_close_volume 0 +ubifs_scan_destroy 0 +ubi_scan_destroy_si 0 +ubi_scan_rm_volume 1 +ucma_free_ctx 0 +udf_sb_free_bitmap 0 +unregister_8022_client 0 +unregister_mad_agent 0 +unregister_mad_snoop 0 +unregister_snap_client 0 +unregister_sysctl_table 0 +unx_free_cred 0 +urb_free_priv 1 +usb_cleanup 0 +usblp_cleanup 0 +usb_se401_remove_disconnected 0 +usbvision_release 0 +user_destroy 0 +user_destroy 1 +uvesafb_free 0 +uwbd_event_queue 0 +uwb_rc_cmd_async 2 +v4l2_i2c_drv_detach_legacy 0 +video_device_release 0 +vlan_group_free 0 +vlsi_free_ring 0 +__vmalloc_area_node 0 +vnic_dev_unregister 0 +vq_req_free 1 +vq_req_put 1 +vx_free_pipe 1 +w1_slave_detach 0 +wear_leveling_worker 1 +wl_del_wavepoint 0 +__wlp_neighbor_release 0 +wm8350_i2c_probe 0 +wm8775_detach 0 +wusb_dev_free 0 +xcbc_free 0 +xfrm_hash_free 0 +xfrm_policy_destroy 0 +xfrm_state_gc_destroy 0 +xprt_rdma_destroy 0 +xs_destroy 0 +xt_free_table_info 0 +xt_rateest_put 0 +xt_register_table 1 +xt_unregister_table 0 +zoran_release 0 +zoran_vdev_release 0 diff --git a/smatch_files.c b/smatch_files.c new file mode 100644 index 00000000..d26d3161 --- /dev/null +++ b/smatch_files.c @@ -0,0 +1,48 @@ +/* + * sparse/smatch_files.c + * + * Copyright (C) 2009 Dan Carpenter. + * + * Licensed under the Open Software License version 1.1 + * + */ + +#include +#include +#include +#include "parse.h" +#include "smatch.h" + +static int open_file(const char *filename) +{ + int fd; + char *buf = malloc(256); + + fd = open(filename, O_RDONLY); + if (fd >= 0) + goto exit; + strncpy(buf, bin_dir, 254); + buf[255] = '\0'; + strncat(buf, "/smatch_data/", 254); + strncat(buf, filename, 254); + fd = open(buf, O_RDONLY); + if (fd >= 0) + goto exit; + +exit: + free(buf); + return fd; +} + +struct token *get_tokens_file(const char *filename) +{ + int fd; + struct token *token; + + fd = open_file(filename); + if (fd < 0) + return NULL; + token = tokenize(filename, fd, NULL, NULL); + close(fd); + return token; +} diff --git a/smatch_scripts/gen_frees_list.sh b/smatch_scripts/gen_frees_list.sh index 81dad259..5a1a388f 100755 --- a/smatch_scripts/gen_frees_list.sh +++ b/smatch_scripts/gen_frees_list.sh @@ -7,5 +7,8 @@ if [[ "$file" = "" ]] ; then exit 1 fi -grep -w free_arg $file | cut -d ' ' -f 3- +echo "// list of functions and the argument they free." > kernel.frees_argument +echo '// generated by `gen_frees_list.sh`' >> kernel.frees_argument +grep -w free_arg $file | cut -d ' ' -f 3- >> kernel.frees_argument +echo "Done. List saved as 'kernel.frees_argument'" -- 2.11.4.GIT