Lines Matching refs:mod
179 static void mod_tree_insert(struct module *mod) in mod_tree_insert() argument
181 mod->core_layout.mtn.mod = mod; in mod_tree_insert()
182 mod->init_layout.mtn.mod = mod; in mod_tree_insert()
184 __mod_tree_insert(&mod->core_layout.mtn); in mod_tree_insert()
185 if (mod->init_layout.size) in mod_tree_insert()
186 __mod_tree_insert(&mod->init_layout.mtn); in mod_tree_insert()
189 static void mod_tree_remove_init(struct module *mod) in mod_tree_remove_init() argument
191 if (mod->init_layout.size) in mod_tree_remove_init()
192 __mod_tree_remove(&mod->init_layout.mtn); in mod_tree_remove_init()
195 static void mod_tree_remove(struct module *mod) in mod_tree_remove() argument
197 __mod_tree_remove(&mod->core_layout.mtn); in mod_tree_remove()
198 mod_tree_remove_init(mod); in mod_tree_remove()
209 return container_of(ltn, struct mod_tree_node, node)->mod; in mod_find()
216 static void mod_tree_insert(struct module *mod) { } in mod_tree_insert() argument
217 static void mod_tree_remove_init(struct module *mod) { } in mod_tree_remove_init() argument
218 static void mod_tree_remove(struct module *mod) { } in mod_tree_remove() argument
222 struct module *mod; in mod_find() local
224 list_for_each_entry_rcu(mod, &modules, list) { in mod_find()
225 if (within_module(addr, mod)) in mod_find()
226 return mod; in mod_find()
249 static void mod_update_bounds(struct module *mod) in mod_update_bounds() argument
251 __mod_update_bounds(mod->core_layout.base, mod->core_layout.size); in mod_update_bounds()
252 if (mod->init_layout.size) in mod_update_bounds()
253 __mod_update_bounds(mod->init_layout.base, mod->init_layout.size); in mod_update_bounds()
315 static inline int strong_try_module_get(struct module *mod) in strong_try_module_get() argument
317 BUG_ON(mod && mod->state == MODULE_STATE_UNFORMED); in strong_try_module_get()
318 if (mod && mod->state == MODULE_STATE_COMING) in strong_try_module_get()
320 if (try_module_get(mod)) in strong_try_module_get()
326 static inline void add_taint_module(struct module *mod, unsigned flag, in add_taint_module() argument
330 set_bit(flag, &mod->taints); in add_taint_module()
337 void __noreturn __module_put_and_exit(struct module *mod, long code) in __module_put_and_exit() argument
339 module_put(mod); in __module_put_and_exit()
428 struct module *mod; in each_symbol_section() local
453 list_for_each_entry_rcu(mod, &modules, list) { in each_symbol_section()
455 { mod->syms, mod->syms + mod->num_syms, mod->crcs, in each_symbol_section()
457 { mod->gpl_syms, mod->gpl_syms + mod->num_gpl_syms, in each_symbol_section()
458 mod->gpl_crcs, in each_symbol_section()
460 { mod->gpl_future_syms, in each_symbol_section()
461 mod->gpl_future_syms + mod->num_gpl_future_syms, in each_symbol_section()
462 mod->gpl_future_crcs, in each_symbol_section()
465 { mod->unused_syms, in each_symbol_section()
466 mod->unused_syms + mod->num_unused_syms, in each_symbol_section()
467 mod->unused_crcs, in each_symbol_section()
469 { mod->unused_gpl_syms, in each_symbol_section()
470 mod->unused_gpl_syms + mod->num_unused_gpl_syms, in each_symbol_section()
471 mod->unused_gpl_crcs, in each_symbol_section()
476 if (mod->state == MODULE_STATE_UNFORMED) in each_symbol_section()
479 if (each_symbol_in_section(arr, ARRAY_SIZE(arr), mod, fn, data)) in each_symbol_section()
608 struct module *mod; in find_module_all() local
612 list_for_each_entry_rcu(mod, &modules, list) { in find_module_all()
613 if (!even_unformed && mod->state == MODULE_STATE_UNFORMED) in find_module_all()
615 if (strlen(mod->name) == len && !memcmp(mod->name, name, len)) in find_module_all()
616 return mod; in find_module_all()
630 static inline void __percpu *mod_percpu(struct module *mod) in mod_percpu() argument
632 return mod->percpu; in mod_percpu()
635 static int percpu_modalloc(struct module *mod, struct load_info *info) in percpu_modalloc() argument
645 mod->name, align, PAGE_SIZE); in percpu_modalloc()
649 mod->percpu = __alloc_reserved_percpu(pcpusec->sh_size, align); in percpu_modalloc()
650 if (!mod->percpu) { in percpu_modalloc()
652 mod->name, (unsigned long)pcpusec->sh_size); in percpu_modalloc()
655 mod->percpu_size = pcpusec->sh_size; in percpu_modalloc()
659 static void percpu_modfree(struct module *mod) in percpu_modfree() argument
661 free_percpu(mod->percpu); in percpu_modfree()
669 static void percpu_modcopy(struct module *mod, in percpu_modcopy() argument
675 memcpy(per_cpu_ptr(mod->percpu, cpu), from, size); in percpu_modcopy()
680 struct module *mod; in __is_module_percpu_address() local
685 list_for_each_entry_rcu(mod, &modules, list) { in __is_module_percpu_address()
686 if (mod->state == MODULE_STATE_UNFORMED) in __is_module_percpu_address()
688 if (!mod->percpu_size) in __is_module_percpu_address()
691 void *start = per_cpu_ptr(mod->percpu, cpu); in __is_module_percpu_address()
694 if (va >= start && va < start + mod->percpu_size) { in __is_module_percpu_address()
698 per_cpu_ptr(mod->percpu, in __is_module_percpu_address()
727 static inline void __percpu *mod_percpu(struct module *mod) in mod_percpu() argument
731 static int percpu_modalloc(struct module *mod, struct load_info *info) in percpu_modalloc() argument
738 static inline void percpu_modfree(struct module *mod) in percpu_modfree() argument
745 static inline void percpu_modcopy(struct module *mod, in percpu_modcopy() argument
764 static void setup_modinfo_##field(struct module *mod, const char *s) \
766 mod->field = kstrdup(s, GFP_KERNEL); \
771 return scnprintf(buffer, PAGE_SIZE, "%s\n", mk->mod->field); \
773 static int modinfo_##field##_exists(struct module *mod) \
775 return mod->field != NULL; \
777 static void free_modinfo_##field(struct module *mod) \
779 kfree(mod->field); \
780 mod->field = NULL; \
803 static int module_unload_init(struct module *mod) in module_unload_init() argument
809 atomic_set(&mod->refcnt, MODULE_REF_BASE); in module_unload_init()
811 INIT_LIST_HEAD(&mod->source_list); in module_unload_init()
812 INIT_LIST_HEAD(&mod->target_list); in module_unload_init()
815 atomic_inc(&mod->refcnt); in module_unload_init()
881 static void module_unload_free(struct module *mod) in module_unload_free() argument
886 list_for_each_entry_safe(use, tmp, &mod->target_list, target_list) { in module_unload_free()
888 pr_debug("%s unusing %s\n", mod->name, i->name); in module_unload_free()
913 static int try_release_module_ref(struct module *mod) in try_release_module_ref() argument
918 ret = atomic_sub_return(MODULE_REF_BASE, &mod->refcnt); in try_release_module_ref()
922 ret = atomic_add_unless(&mod->refcnt, MODULE_REF_BASE, 0); in try_release_module_ref()
927 static int try_stop_module(struct module *mod, int flags, int *forced) in try_stop_module() argument
930 if (try_release_module_ref(mod) != 0) { in try_stop_module()
937 mod->state = MODULE_STATE_GOING; in try_stop_module()
951 int module_refcount(struct module *mod) in module_refcount() argument
953 return atomic_read(&mod->refcnt) - MODULE_REF_BASE; in module_refcount()
958 static void free_module(struct module *mod);
963 struct module *mod; in SYSCALL_DEFINE2() local
979 mod = find_module(name); in SYSCALL_DEFINE2()
980 if (!mod) { in SYSCALL_DEFINE2()
985 if (!list_empty(&mod->source_list)) { in SYSCALL_DEFINE2()
992 if (mod->state != MODULE_STATE_LIVE) { in SYSCALL_DEFINE2()
994 pr_debug("%s already dying\n", mod->name); in SYSCALL_DEFINE2()
1000 if (mod->init && !mod->exit) { in SYSCALL_DEFINE2()
1010 ret = try_stop_module(mod, flags, &forced); in SYSCALL_DEFINE2()
1016 if (mod->exit != NULL) in SYSCALL_DEFINE2()
1017 mod->exit(); in SYSCALL_DEFINE2()
1019 MODULE_STATE_GOING, mod); in SYSCALL_DEFINE2()
1020 klp_module_going(mod); in SYSCALL_DEFINE2()
1021 ftrace_release_mod(mod); in SYSCALL_DEFINE2()
1026 strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module)); in SYSCALL_DEFINE2()
1028 free_module(mod); in SYSCALL_DEFINE2()
1035 static inline void print_unload_info(struct seq_file *m, struct module *mod) in print_unload_info() argument
1040 seq_printf(m, " %i ", module_refcount(mod)); in print_unload_info()
1046 list_for_each_entry(use, &mod->source_list, source_list) { in print_unload_info()
1051 if (mod->init != NULL && mod->exit == NULL) { in print_unload_info()
1096 return sprintf(buffer, "%i\n", module_refcount(mk->mod)); in show_refcnt()
1147 static inline void print_unload_info(struct seq_file *m, struct module *mod) in print_unload_info() argument
1153 static inline void module_unload_free(struct module *mod) in module_unload_free() argument
1163 static inline int module_unload_init(struct module *mod) in module_unload_init() argument
1169 static size_t module_flags_taint(struct module *mod, char *buf) in module_flags_taint() argument
1175 if (taint_flags[i].module && test_bit(i, &mod->taints)) in module_flags_taint()
1187 switch (mk->mod->state) { in show_initstate()
1220 return sprintf(buffer, "%u\n", mk->mod->core_layout.size); in show_coresize()
1229 return sprintf(buffer, "%u\n", mk->mod->init_layout.size); in show_initsize()
1240 l = module_flags_taint(mk->mod, buffer); in show_taint()
1264 static int try_to_force_load(struct module *mod, const char *reason) in try_to_force_load() argument
1268 pr_warn("%s: %s: kernel tainted.\n", mod->name, reason); in try_to_force_load()
1269 add_taint_module(mod, TAINT_FORCED_MODULE, LOCKDEP_NOW_UNRELIABLE); in try_to_force_load()
1285 struct module *mod, in check_version() argument
1299 return try_to_force_load(mod, symname) == 0; in check_version()
1333 struct module *mod) in check_modstruct_version() argument
1347 return check_version(info, "module_layout", mod, crc); in check_modstruct_version()
1363 struct module *mod, in check_version() argument
1370 struct module *mod) in check_modstruct_version() argument
1383 static const struct kernel_symbol *resolve_symbol(struct module *mod, in resolve_symbol() argument
1401 !(mod->taints & (1 << TAINT_PROPRIETARY_MODULE)), true); in resolve_symbol()
1405 if (!check_version(info, name, mod, crc)) { in resolve_symbol()
1410 err = ref_module(mod, owner); in resolve_symbol()
1425 resolve_symbol_wait(struct module *mod, in resolve_symbol_wait() argument
1433 !IS_ERR(ksym = resolve_symbol(mod, info, name, owner)) in resolve_symbol_wait()
1437 mod->name, owner); in resolve_symbol_wait()
1484 static void add_sect_attrs(struct module *mod, const struct load_info *info) in add_sect_attrs() argument
1529 if (sysfs_create_group(&mod->mkobj.kobj, §_attrs->grp)) in add_sect_attrs()
1532 mod->sect_attrs = sect_attrs; in add_sect_attrs()
1538 static void remove_sect_attrs(struct module *mod) in remove_sect_attrs() argument
1540 if (mod->sect_attrs) { in remove_sect_attrs()
1541 sysfs_remove_group(&mod->mkobj.kobj, in remove_sect_attrs()
1542 &mod->sect_attrs->grp); in remove_sect_attrs()
1545 free_sect_attrs(mod->sect_attrs); in remove_sect_attrs()
1546 mod->sect_attrs = NULL; in remove_sect_attrs()
1583 static void add_notes_attrs(struct module *mod, const struct load_info *info) in add_notes_attrs() argument
1590 if (!mod->sect_attrs) in add_notes_attrs()
1615 nattr->attr.name = mod->sect_attrs->attrs[loaded].name; in add_notes_attrs()
1625 notes_attrs->dir = kobject_create_and_add("notes", &mod->mkobj.kobj); in add_notes_attrs()
1634 mod->notes_attrs = notes_attrs; in add_notes_attrs()
1641 static void remove_notes_attrs(struct module *mod) in remove_notes_attrs() argument
1643 if (mod->notes_attrs) in remove_notes_attrs()
1644 free_notes_attrs(mod->notes_attrs, mod->notes_attrs->notes); in remove_notes_attrs()
1649 static inline void add_sect_attrs(struct module *mod, in add_sect_attrs() argument
1654 static inline void remove_sect_attrs(struct module *mod) in remove_sect_attrs() argument
1658 static inline void add_notes_attrs(struct module *mod, in add_notes_attrs() argument
1663 static inline void remove_notes_attrs(struct module *mod) in remove_notes_attrs() argument
1668 static void del_usage_links(struct module *mod) in del_usage_links() argument
1674 list_for_each_entry(use, &mod->target_list, target_list) in del_usage_links()
1675 sysfs_remove_link(use->target->holders_dir, mod->name); in del_usage_links()
1680 static int add_usage_links(struct module *mod) in add_usage_links() argument
1687 list_for_each_entry(use, &mod->target_list, target_list) { in add_usage_links()
1689 &mod->mkobj.kobj, mod->name); in add_usage_links()
1695 del_usage_links(mod); in add_usage_links()
1700 static int module_add_modinfo_attrs(struct module *mod) in module_add_modinfo_attrs() argument
1707 mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) * in module_add_modinfo_attrs()
1710 if (!mod->modinfo_attrs) in module_add_modinfo_attrs()
1713 temp_attr = mod->modinfo_attrs; in module_add_modinfo_attrs()
1715 if (!attr->test || attr->test(mod)) { in module_add_modinfo_attrs()
1718 error = sysfs_create_file(&mod->mkobj.kobj, in module_add_modinfo_attrs()
1726 static void module_remove_modinfo_attrs(struct module *mod) in module_remove_modinfo_attrs() argument
1731 for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) { in module_remove_modinfo_attrs()
1735 sysfs_remove_file(&mod->mkobj.kobj, &attr->attr); in module_remove_modinfo_attrs()
1737 attr->free(mod); in module_remove_modinfo_attrs()
1739 kfree(mod->modinfo_attrs); in module_remove_modinfo_attrs()
1742 static void mod_kobject_put(struct module *mod) in mod_kobject_put() argument
1745 mod->mkobj.kobj_completion = &c; in mod_kobject_put()
1746 kobject_put(&mod->mkobj.kobj); in mod_kobject_put()
1750 static int mod_sysfs_init(struct module *mod) in mod_sysfs_init() argument
1756 pr_err("%s: module sysfs not initialized\n", mod->name); in mod_sysfs_init()
1761 kobj = kset_find_obj(module_kset, mod->name); in mod_sysfs_init()
1763 pr_err("%s: module is already loaded\n", mod->name); in mod_sysfs_init()
1769 mod->mkobj.mod = mod; in mod_sysfs_init()
1771 memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj)); in mod_sysfs_init()
1772 mod->mkobj.kobj.kset = module_kset; in mod_sysfs_init()
1773 err = kobject_init_and_add(&mod->mkobj.kobj, &module_ktype, NULL, in mod_sysfs_init()
1774 "%s", mod->name); in mod_sysfs_init()
1776 mod_kobject_put(mod); in mod_sysfs_init()
1783 static int mod_sysfs_setup(struct module *mod, in mod_sysfs_setup() argument
1790 err = mod_sysfs_init(mod); in mod_sysfs_setup()
1794 mod->holders_dir = kobject_create_and_add("holders", &mod->mkobj.kobj); in mod_sysfs_setup()
1795 if (!mod->holders_dir) { in mod_sysfs_setup()
1800 err = module_param_sysfs_setup(mod, kparam, num_params); in mod_sysfs_setup()
1804 err = module_add_modinfo_attrs(mod); in mod_sysfs_setup()
1808 err = add_usage_links(mod); in mod_sysfs_setup()
1812 add_sect_attrs(mod, info); in mod_sysfs_setup()
1813 add_notes_attrs(mod, info); in mod_sysfs_setup()
1815 kobject_uevent(&mod->mkobj.kobj, KOBJ_ADD); in mod_sysfs_setup()
1819 module_remove_modinfo_attrs(mod); in mod_sysfs_setup()
1821 module_param_sysfs_remove(mod); in mod_sysfs_setup()
1823 kobject_put(mod->holders_dir); in mod_sysfs_setup()
1825 mod_kobject_put(mod); in mod_sysfs_setup()
1830 static void mod_sysfs_fini(struct module *mod) in mod_sysfs_fini() argument
1832 remove_notes_attrs(mod); in mod_sysfs_fini()
1833 remove_sect_attrs(mod); in mod_sysfs_fini()
1834 mod_kobject_put(mod); in mod_sysfs_fini()
1837 static void init_param_lock(struct module *mod) in init_param_lock() argument
1839 mutex_init(&mod->param_lock); in init_param_lock()
1843 static int mod_sysfs_setup(struct module *mod, in mod_sysfs_setup() argument
1851 static void mod_sysfs_fini(struct module *mod) in mod_sysfs_fini() argument
1855 static void module_remove_modinfo_attrs(struct module *mod) in module_remove_modinfo_attrs() argument
1859 static void del_usage_links(struct module *mod) in del_usage_links() argument
1863 static void init_param_lock(struct module *mod) in init_param_lock() argument
1868 static void mod_sysfs_teardown(struct module *mod) in mod_sysfs_teardown() argument
1870 del_usage_links(mod); in mod_sysfs_teardown()
1871 module_remove_modinfo_attrs(mod); in mod_sysfs_teardown()
1872 module_param_sysfs_remove(mod); in mod_sysfs_teardown()
1873 kobject_put(mod->mkobj.drivers_dir); in mod_sysfs_teardown()
1874 kobject_put(mod->holders_dir); in mod_sysfs_teardown()
1875 mod_sysfs_fini(mod); in mod_sysfs_teardown()
1932 void module_disable_ro(const struct module *mod) in module_disable_ro() argument
1937 frob_text(&mod->core_layout, set_memory_rw); in module_disable_ro()
1938 frob_rodata(&mod->core_layout, set_memory_rw); in module_disable_ro()
1939 frob_ro_after_init(&mod->core_layout, set_memory_rw); in module_disable_ro()
1940 frob_text(&mod->init_layout, set_memory_rw); in module_disable_ro()
1941 frob_rodata(&mod->init_layout, set_memory_rw); in module_disable_ro()
1944 void module_enable_ro(const struct module *mod, bool after_init) in module_enable_ro() argument
1949 frob_text(&mod->core_layout, set_memory_ro); in module_enable_ro()
1950 frob_rodata(&mod->core_layout, set_memory_ro); in module_enable_ro()
1951 frob_text(&mod->init_layout, set_memory_ro); in module_enable_ro()
1952 frob_rodata(&mod->init_layout, set_memory_ro); in module_enable_ro()
1955 frob_ro_after_init(&mod->core_layout, set_memory_ro); in module_enable_ro()
1958 static void module_enable_nx(const struct module *mod) in module_enable_nx() argument
1960 frob_rodata(&mod->core_layout, set_memory_nx); in module_enable_nx()
1961 frob_ro_after_init(&mod->core_layout, set_memory_nx); in module_enable_nx()
1962 frob_writable_data(&mod->core_layout, set_memory_nx); in module_enable_nx()
1963 frob_rodata(&mod->init_layout, set_memory_nx); in module_enable_nx()
1964 frob_writable_data(&mod->init_layout, set_memory_nx); in module_enable_nx()
1967 static void module_disable_nx(const struct module *mod) in module_disable_nx() argument
1969 frob_rodata(&mod->core_layout, set_memory_x); in module_disable_nx()
1970 frob_ro_after_init(&mod->core_layout, set_memory_x); in module_disable_nx()
1971 frob_writable_data(&mod->core_layout, set_memory_x); in module_disable_nx()
1972 frob_rodata(&mod->init_layout, set_memory_x); in module_disable_nx()
1973 frob_writable_data(&mod->init_layout, set_memory_x); in module_disable_nx()
1979 struct module *mod; in set_all_modules_text_rw() local
1985 list_for_each_entry_rcu(mod, &modules, list) { in set_all_modules_text_rw()
1986 if (mod->state == MODULE_STATE_UNFORMED) in set_all_modules_text_rw()
1989 frob_text(&mod->core_layout, set_memory_rw); in set_all_modules_text_rw()
1990 frob_text(&mod->init_layout, set_memory_rw); in set_all_modules_text_rw()
1998 struct module *mod; in set_all_modules_text_ro() local
2004 list_for_each_entry_rcu(mod, &modules, list) { in set_all_modules_text_ro()
2010 if (mod->state == MODULE_STATE_UNFORMED || in set_all_modules_text_ro()
2011 mod->state == MODULE_STATE_GOING) in set_all_modules_text_ro()
2014 frob_text(&mod->core_layout, set_memory_ro); in set_all_modules_text_ro()
2015 frob_text(&mod->init_layout, set_memory_ro); in set_all_modules_text_ro()
2034 static void module_enable_nx(const struct module *mod) { } in module_enable_nx() argument
2035 static void module_disable_nx(const struct module *mod) { } in module_disable_nx() argument
2044 static int copy_module_elf(struct module *mod, struct load_info *info) in copy_module_elf() argument
2049 size = sizeof(*mod->klp_info); in copy_module_elf()
2050 mod->klp_info = kmalloc(size, GFP_KERNEL); in copy_module_elf()
2051 if (mod->klp_info == NULL) in copy_module_elf()
2055 size = sizeof(mod->klp_info->hdr); in copy_module_elf()
2056 memcpy(&mod->klp_info->hdr, info->hdr, size); in copy_module_elf()
2060 mod->klp_info->sechdrs = kmemdup(info->sechdrs, size, GFP_KERNEL); in copy_module_elf()
2061 if (mod->klp_info->sechdrs == NULL) { in copy_module_elf()
2068 mod->klp_info->secstrings = kmemdup(info->secstrings, size, GFP_KERNEL); in copy_module_elf()
2069 if (mod->klp_info->secstrings == NULL) { in copy_module_elf()
2076 mod->klp_info->symndx = symndx; in copy_module_elf()
2084 mod->klp_info->sechdrs[symndx].sh_addr = \ in copy_module_elf()
2085 (unsigned long) mod->core_kallsyms.symtab; in copy_module_elf()
2090 kfree(mod->klp_info->sechdrs); in copy_module_elf()
2092 kfree(mod->klp_info); in copy_module_elf()
2096 static void free_module_elf(struct module *mod) in free_module_elf() argument
2098 kfree(mod->klp_info->sechdrs); in free_module_elf()
2099 kfree(mod->klp_info->secstrings); in free_module_elf()
2100 kfree(mod->klp_info); in free_module_elf()
2103 static int copy_module_elf(struct module *mod, struct load_info *info) in copy_module_elf() argument
2108 static void free_module_elf(struct module *mod) in free_module_elf() argument
2118 void __weak module_arch_cleanup(struct module *mod) in module_arch_cleanup() argument
2122 void __weak module_arch_freeing_init(struct module *mod) in module_arch_freeing_init() argument
2127 static void free_module(struct module *mod) in free_module() argument
2129 trace_module_free(mod); in free_module()
2131 mod_sysfs_teardown(mod); in free_module()
2136 mod->state = MODULE_STATE_UNFORMED; in free_module()
2140 ddebug_remove_module(mod->name); in free_module()
2143 module_arch_cleanup(mod); in free_module()
2146 module_unload_free(mod); in free_module()
2149 destroy_params(mod->kp, mod->num_kp); in free_module()
2151 if (is_livepatch_module(mod)) in free_module()
2152 free_module_elf(mod); in free_module()
2157 list_del_rcu(&mod->list); in free_module()
2158 mod_tree_remove(mod); in free_module()
2160 module_bug_cleanup(mod); in free_module()
2166 disable_ro_nx(&mod->init_layout); in free_module()
2167 module_arch_freeing_init(mod); in free_module()
2168 module_memfree(mod->init_layout.base); in free_module()
2169 kfree(mod->args); in free_module()
2170 percpu_modfree(mod); in free_module()
2173 lockdep_free_key_range(mod->core_layout.base, mod->core_layout.size); in free_module()
2176 disable_ro_nx(&mod->core_layout); in free_module()
2177 module_memfree(mod->core_layout.base); in free_module()
2201 static int verify_export_symbols(struct module *mod) in verify_export_symbols() argument
2210 { mod->syms, mod->num_syms }, in verify_export_symbols()
2211 { mod->gpl_syms, mod->num_gpl_syms }, in verify_export_symbols()
2212 { mod->gpl_future_syms, mod->num_gpl_future_syms }, in verify_export_symbols()
2214 { mod->unused_syms, mod->num_unused_syms }, in verify_export_symbols()
2215 { mod->unused_gpl_syms, mod->num_unused_gpl_syms }, in verify_export_symbols()
2225 mod->name, kernel_symbol_name(s), in verify_export_symbols()
2235 static int simplify_symbols(struct module *mod, const struct load_info *info) in simplify_symbols() argument
2257 mod->name); in simplify_symbols()
2272 ksym = resolve_symbol_wait(mod, info, name); in simplify_symbols()
2285 mod->name, name, ret); in simplify_symbols()
2291 secbase = (unsigned long)mod_percpu(mod); in simplify_symbols()
2302 static int apply_relocations(struct module *mod, const struct load_info *info) in apply_relocations() argument
2325 info->index.sym, i, mod); in apply_relocations()
2328 info->index.sym, i, mod); in apply_relocations()
2336 unsigned int __weak arch_mod_section_prepend(struct module *mod, in arch_mod_section_prepend() argument
2344 static long get_offset(struct module *mod, unsigned int *size, in get_offset() argument
2349 *size += arch_mod_section_prepend(mod, section); in get_offset()
2359 static void layout_sections(struct module *mod, struct load_info *info) in layout_sections() argument
2387 s->sh_entsize = get_offset(mod, &mod->core_layout.size, s, i); in layout_sections()
2392 mod->core_layout.size = debug_align(mod->core_layout.size); in layout_sections()
2393 mod->core_layout.text_size = mod->core_layout.size; in layout_sections()
2396 mod->core_layout.size = debug_align(mod->core_layout.size); in layout_sections()
2397 mod->core_layout.ro_size = mod->core_layout.size; in layout_sections()
2400 mod->core_layout.size = debug_align(mod->core_layout.size); in layout_sections()
2401 mod->core_layout.ro_after_init_size = mod->core_layout.size; in layout_sections()
2404 mod->core_layout.size = debug_align(mod->core_layout.size); in layout_sections()
2420 s->sh_entsize = (get_offset(mod, &mod->init_layout.size, s, i) in layout_sections()
2426 mod->init_layout.size = debug_align(mod->init_layout.size); in layout_sections()
2427 mod->init_layout.text_size = mod->init_layout.size; in layout_sections()
2430 mod->init_layout.size = debug_align(mod->init_layout.size); in layout_sections()
2431 mod->init_layout.ro_size = mod->init_layout.size; in layout_sections()
2438 mod->init_layout.ro_after_init_size = mod->init_layout.ro_size; in layout_sections()
2441 mod->init_layout.size = debug_align(mod->init_layout.size); in layout_sections()
2447 static void set_license(struct module *mod, const char *license) in set_license() argument
2455 mod->name, license); in set_license()
2456 add_taint_module(mod, TAINT_PROPRIETARY_MODULE, in set_license()
2498 static void setup_modinfo(struct module *mod, struct load_info *info) in setup_modinfo() argument
2505 attr->setup(mod, get_modinfo(info, attr->attr.name)); in setup_modinfo()
2509 static void free_modinfo(struct module *mod) in free_modinfo() argument
2516 attr->free(mod); in free_modinfo()
2532 const struct module *mod) in is_exported() argument
2535 if (!mod) in is_exported()
2538 ks = lookup_symbol(name, mod->syms, mod->syms + mod->num_syms); in is_exported()
2616 static void layout_symtab(struct module *mod, struct load_info *info) in layout_symtab() argument
2625 symsect->sh_entsize = get_offset(mod, &mod->init_layout.size, symsect, in layout_symtab()
2634 if (i == 0 || is_livepatch_module(mod) || in layout_symtab()
2643 info->symoffs = ALIGN(mod->core_layout.size, symsect->sh_addralign ?: 1); in layout_symtab()
2644 info->stroffs = mod->core_layout.size = info->symoffs + ndst * sizeof(Elf_Sym); in layout_symtab()
2645 mod->core_layout.size += strtab_size; in layout_symtab()
2646 mod->core_layout.size = debug_align(mod->core_layout.size); in layout_symtab()
2650 strsect->sh_entsize = get_offset(mod, &mod->init_layout.size, strsect, in layout_symtab()
2655 mod->init_layout.size = ALIGN(mod->init_layout.size, in layout_symtab()
2657 info->mod_kallsyms_init_off = mod->init_layout.size; in layout_symtab()
2658 mod->init_layout.size += sizeof(struct mod_kallsyms); in layout_symtab()
2659 mod->init_layout.size = debug_align(mod->init_layout.size); in layout_symtab()
2667 static void add_kallsyms(struct module *mod, const struct load_info *info) in add_kallsyms() argument
2676 mod->kallsyms = mod->init_layout.base + info->mod_kallsyms_init_off; in add_kallsyms()
2678 mod->kallsyms->symtab = (void *)symsec->sh_addr; in add_kallsyms()
2679 mod->kallsyms->num_symtab = symsec->sh_size / sizeof(Elf_Sym); in add_kallsyms()
2681 mod->kallsyms->strtab = (void *)info->sechdrs[info->index.str].sh_addr; in add_kallsyms()
2684 for (i = 0; i < mod->kallsyms->num_symtab; i++) in add_kallsyms()
2685 mod->kallsyms->symtab[i].st_info in add_kallsyms()
2686 = elf_type(&mod->kallsyms->symtab[i], info); in add_kallsyms()
2689 mod->core_kallsyms.symtab = dst = mod->core_layout.base + info->symoffs; in add_kallsyms()
2690 mod->core_kallsyms.strtab = s = mod->core_layout.base + info->stroffs; in add_kallsyms()
2691 src = mod->kallsyms->symtab; in add_kallsyms()
2692 for (ndst = i = 0; i < mod->kallsyms->num_symtab; i++) { in add_kallsyms()
2693 if (i == 0 || is_livepatch_module(mod) || in add_kallsyms()
2697 dst[ndst++].st_name = s - mod->core_kallsyms.strtab; in add_kallsyms()
2698 s += strlcpy(s, &mod->kallsyms->strtab[src[i].st_name], in add_kallsyms()
2702 mod->core_kallsyms.num_symtab = ndst; in add_kallsyms()
2705 static inline void layout_symtab(struct module *mod, struct load_info *info) in layout_symtab() argument
2709 static void add_kallsyms(struct module *mod, const struct load_info *info) in add_kallsyms() argument
2714 static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num) in dynamic_debug_setup() argument
2719 if (ddebug_add_module(debug, num, mod->name)) in dynamic_debug_setup()
2725 static void dynamic_debug_remove(struct module *mod, struct _ddebug *debug) in dynamic_debug_remove() argument
2728 ddebug_remove_module(mod->name); in dynamic_debug_remove()
2737 static void kmemleak_load_module(const struct module *mod, in kmemleak_load_module() argument
2743 kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL); in kmemleak_load_module()
2757 static inline void kmemleak_load_module(const struct module *mod, in kmemleak_load_module() argument
2768 const void *mod = info->hdr; in module_sig_check() local
2776 memcmp(mod + info->len - markerlen, MODULE_SIG_STRING, markerlen) == 0) { in module_sig_check()
2779 err = mod_verify_sig(mod, info); in module_sig_check()
2838 static int check_modinfo_livepatch(struct module *mod, struct load_info *info) in check_modinfo_livepatch() argument
2841 mod->klp = true; in check_modinfo_livepatch()
2842 add_taint_module(mod, TAINT_LIVEPATCH, LOCKDEP_STILL_OK); in check_modinfo_livepatch()
2844 mod->name); in check_modinfo_livepatch()
2850 static int check_modinfo_livepatch(struct module *mod, struct load_info *info) in check_modinfo_livepatch() argument
2854 mod->name); in check_modinfo_livepatch()
2862 static void check_modinfo_retpoline(struct module *mod, struct load_info *info) in check_modinfo_retpoline() argument
2868 mod->name); in check_modinfo_retpoline()
2977 info->index.mod = find_sec(info, ".gnu.linkonce.this_module"); in setup_load_info()
2978 if (!info->index.mod) { in setup_load_info()
2984 info->mod = (void *)info->hdr + info->sechdrs[info->index.mod].sh_offset; in setup_load_info()
2991 info->name = info->mod->name; in setup_load_info()
3003 static int check_modinfo(struct module *mod, struct load_info *info, int flags) in check_modinfo() argument
3013 err = try_to_force_load(mod, "bad vermagic"); in check_modinfo()
3025 mod->name); in check_modinfo()
3026 add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK); in check_modinfo()
3029 check_modinfo_retpoline(mod, info); in check_modinfo()
3032 add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK); in check_modinfo()
3034 "is unknown, you have been warned.\n", mod->name); in check_modinfo()
3037 err = check_modinfo_livepatch(mod, info); in check_modinfo()
3042 set_license(mod, get_modinfo(info, "license")); in check_modinfo()
3047 static int find_module_sections(struct module *mod, struct load_info *info) in find_module_sections() argument
3049 mod->kp = section_objs(info, "__param", in find_module_sections()
3050 sizeof(*mod->kp), &mod->num_kp); in find_module_sections()
3051 mod->syms = section_objs(info, "__ksymtab", in find_module_sections()
3052 sizeof(*mod->syms), &mod->num_syms); in find_module_sections()
3053 mod->crcs = section_addr(info, "__kcrctab"); in find_module_sections()
3054 mod->gpl_syms = section_objs(info, "__ksymtab_gpl", in find_module_sections()
3055 sizeof(*mod->gpl_syms), in find_module_sections()
3056 &mod->num_gpl_syms); in find_module_sections()
3057 mod->gpl_crcs = section_addr(info, "__kcrctab_gpl"); in find_module_sections()
3058 mod->gpl_future_syms = section_objs(info, in find_module_sections()
3060 sizeof(*mod->gpl_future_syms), in find_module_sections()
3061 &mod->num_gpl_future_syms); in find_module_sections()
3062 mod->gpl_future_crcs = section_addr(info, "__kcrctab_gpl_future"); in find_module_sections()
3065 mod->unused_syms = section_objs(info, "__ksymtab_unused", in find_module_sections()
3066 sizeof(*mod->unused_syms), in find_module_sections()
3067 &mod->num_unused_syms); in find_module_sections()
3068 mod->unused_crcs = section_addr(info, "__kcrctab_unused"); in find_module_sections()
3069 mod->unused_gpl_syms = section_objs(info, "__ksymtab_unused_gpl", in find_module_sections()
3070 sizeof(*mod->unused_gpl_syms), in find_module_sections()
3071 &mod->num_unused_gpl_syms); in find_module_sections()
3072 mod->unused_gpl_crcs = section_addr(info, "__kcrctab_unused_gpl"); in find_module_sections()
3075 mod->ctors = section_objs(info, ".ctors", in find_module_sections()
3076 sizeof(*mod->ctors), &mod->num_ctors); in find_module_sections()
3077 if (!mod->ctors) in find_module_sections()
3078 mod->ctors = section_objs(info, ".init_array", in find_module_sections()
3079 sizeof(*mod->ctors), &mod->num_ctors); in find_module_sections()
3086 mod->name); in find_module_sections()
3092 mod->tracepoints_ptrs = section_objs(info, "__tracepoints_ptrs", in find_module_sections()
3093 sizeof(*mod->tracepoints_ptrs), in find_module_sections()
3094 &mod->num_tracepoints); in find_module_sections()
3097 mod->jump_entries = section_objs(info, "__jump_table", in find_module_sections()
3098 sizeof(*mod->jump_entries), in find_module_sections()
3099 &mod->num_jump_entries); in find_module_sections()
3102 mod->trace_events = section_objs(info, "_ftrace_events", in find_module_sections()
3103 sizeof(*mod->trace_events), in find_module_sections()
3104 &mod->num_trace_events); in find_module_sections()
3105 mod->trace_evals = section_objs(info, "_ftrace_eval_map", in find_module_sections()
3106 sizeof(*mod->trace_evals), in find_module_sections()
3107 &mod->num_trace_evals); in find_module_sections()
3110 mod->trace_bprintk_fmt_start = section_objs(info, "__trace_printk_fmt", in find_module_sections()
3111 sizeof(*mod->trace_bprintk_fmt_start), in find_module_sections()
3112 &mod->num_trace_bprintk_fmt); in find_module_sections()
3116 mod->ftrace_callsites = section_objs(info, "__mcount_loc", in find_module_sections()
3117 sizeof(*mod->ftrace_callsites), in find_module_sections()
3118 &mod->num_ftrace_callsites); in find_module_sections()
3121 mod->ei_funcs = section_objs(info, "_error_injection_whitelist", in find_module_sections()
3122 sizeof(*mod->ei_funcs), in find_module_sections()
3123 &mod->num_ei_funcs); in find_module_sections()
3125 mod->extable = section_objs(info, "__ex_table", in find_module_sections()
3126 sizeof(*mod->extable), &mod->num_exentries); in find_module_sections()
3129 pr_warn("%s: Ignoring obsolete parameters\n", mod->name); in find_module_sections()
3137 static int move_module(struct module *mod, struct load_info *info) in move_module() argument
3143 ptr = module_alloc(mod->core_layout.size); in move_module()
3153 memset(ptr, 0, mod->core_layout.size); in move_module()
3154 mod->core_layout.base = ptr; in move_module()
3156 if (mod->init_layout.size) { in move_module()
3157 ptr = module_alloc(mod->init_layout.size); in move_module()
3166 module_memfree(mod->core_layout.base); in move_module()
3169 memset(ptr, 0, mod->init_layout.size); in move_module()
3170 mod->init_layout.base = ptr; in move_module()
3172 mod->init_layout.base = NULL; in move_module()
3184 dest = mod->init_layout.base in move_module()
3187 dest = mod->core_layout.base + shdr->sh_entsize; in move_module()
3200 static int check_module_license_and_versions(struct module *mod) in check_module_license_and_versions() argument
3209 if (strcmp(mod->name, "ndiswrapper") == 0) in check_module_license_and_versions()
3213 if (strcmp(mod->name, "driverloader") == 0) in check_module_license_and_versions()
3214 add_taint_module(mod, TAINT_PROPRIETARY_MODULE, in check_module_license_and_versions()
3218 if (strcmp(mod->name, "lve") == 0) in check_module_license_and_versions()
3219 add_taint_module(mod, TAINT_PROPRIETARY_MODULE, in check_module_license_and_versions()
3223 pr_warn("%s: module license taints kernel.\n", mod->name); in check_module_license_and_versions()
3226 if ((mod->num_syms && !mod->crcs) in check_module_license_and_versions()
3227 || (mod->num_gpl_syms && !mod->gpl_crcs) in check_module_license_and_versions()
3228 || (mod->num_gpl_future_syms && !mod->gpl_future_crcs) in check_module_license_and_versions()
3230 || (mod->num_unused_syms && !mod->unused_crcs) in check_module_license_and_versions()
3231 || (mod->num_unused_gpl_syms && !mod->unused_gpl_crcs) in check_module_license_and_versions()
3234 return try_to_force_load(mod, in check_module_license_and_versions()
3241 static void flush_module_icache(const struct module *mod) in flush_module_icache() argument
3254 if (mod->init_layout.base) in flush_module_icache()
3255 flush_icache_range((unsigned long)mod->init_layout.base, in flush_module_icache()
3256 (unsigned long)mod->init_layout.base in flush_module_icache()
3257 + mod->init_layout.size); in flush_module_icache()
3258 flush_icache_range((unsigned long)mod->core_layout.base, in flush_module_icache()
3259 (unsigned long)mod->core_layout.base + mod->core_layout.size); in flush_module_icache()
3267 struct module *mod) in module_frob_arch_sections() argument
3295 struct module *mod; in layout_and_allocate() local
3299 err = check_modinfo(info->mod, info, flags); in layout_and_allocate()
3305 info->secstrings, info->mod); in layout_and_allocate()
3324 layout_sections(info->mod, info); in layout_and_allocate()
3325 layout_symtab(info->mod, info); in layout_and_allocate()
3328 err = move_module(info->mod, info); in layout_and_allocate()
3333 mod = (void *)info->sechdrs[info->index.mod].sh_addr; in layout_and_allocate()
3334 kmemleak_load_module(mod, info); in layout_and_allocate()
3335 return mod; in layout_and_allocate()
3339 static void module_deallocate(struct module *mod, struct load_info *info) in module_deallocate() argument
3341 percpu_modfree(mod); in module_deallocate()
3342 module_arch_freeing_init(mod); in module_deallocate()
3343 module_memfree(mod->init_layout.base); in module_deallocate()
3344 module_memfree(mod->core_layout.base); in module_deallocate()
3354 static int post_relocation(struct module *mod, const struct load_info *info) in post_relocation() argument
3357 sort_extable(mod->extable, mod->extable + mod->num_exentries); in post_relocation()
3360 percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr, in post_relocation()
3364 add_kallsyms(mod, info); in post_relocation()
3367 return module_finalize(info->hdr, info->sechdrs, mod); in post_relocation()
3373 struct module *mod; in finished_loading() local
3383 mod = find_module_all(name, strlen(name), true); in finished_loading()
3384 ret = !mod || mod->state == MODULE_STATE_LIVE in finished_loading()
3385 || mod->state == MODULE_STATE_GOING; in finished_loading()
3392 static void do_mod_ctors(struct module *mod) in do_mod_ctors() argument
3397 for (i = 0; i < mod->num_ctors; i++) in do_mod_ctors()
3398 mod->ctors[i](); in do_mod_ctors()
3421 static noinline int do_init_module(struct module *mod) in do_init_module() argument
3431 freeinit->module_init = mod->init_layout.base; in do_init_module()
3439 do_mod_ctors(mod); in do_init_module()
3441 if (mod->init != NULL) in do_init_module()
3442 ret = do_one_initcall(mod->init); in do_init_module()
3450 __func__, mod->name, ret, __func__); in do_init_module()
3455 mod->state = MODULE_STATE_LIVE; in do_init_module()
3457 MODULE_STATE_LIVE, mod); in do_init_module()
3476 if (!mod->async_probe_requested && (current->flags & PF_USED_ASYNC)) in do_init_module()
3479 ftrace_free_mem(mod, mod->init_layout.base, mod->init_layout.base + in do_init_module()
3480 mod->init_layout.size); in do_init_module()
3483 module_put(mod); in do_init_module()
3484 trim_init_extable(mod); in do_init_module()
3487 rcu_assign_pointer(mod->kallsyms, &mod->core_kallsyms); in do_init_module()
3489 module_enable_ro(mod, true); in do_init_module()
3490 mod_tree_remove_init(mod); in do_init_module()
3491 disable_ro_nx(&mod->init_layout); in do_init_module()
3492 module_arch_freeing_init(mod); in do_init_module()
3493 mod->init_layout.base = NULL; in do_init_module()
3494 mod->init_layout.size = 0; in do_init_module()
3495 mod->init_layout.ro_size = 0; in do_init_module()
3496 mod->init_layout.ro_after_init_size = 0; in do_init_module()
3497 mod->init_layout.text_size = 0; in do_init_module()
3519 mod->state = MODULE_STATE_GOING; in do_init_module()
3521 module_put(mod); in do_init_module()
3523 MODULE_STATE_GOING, mod); in do_init_module()
3524 klp_module_going(mod); in do_init_module()
3525 ftrace_release_mod(mod); in do_init_module()
3526 free_module(mod); in do_init_module()
3544 static int add_unformed_module(struct module *mod) in add_unformed_module() argument
3549 mod->state = MODULE_STATE_UNFORMED; in add_unformed_module()
3553 old = find_module_all(mod->name, strlen(mod->name), true); in add_unformed_module()
3560 finished_loading(mod->name)); in add_unformed_module()
3568 mod_update_bounds(mod); in add_unformed_module()
3569 list_add_rcu(&mod->list, &modules); in add_unformed_module()
3570 mod_tree_insert(mod); in add_unformed_module()
3579 static int complete_formation(struct module *mod, struct load_info *info) in complete_formation() argument
3586 err = verify_export_symbols(mod); in complete_formation()
3591 module_bug_finalize(info->hdr, info->sechdrs, mod); in complete_formation()
3593 module_enable_ro(mod, false); in complete_formation()
3594 module_enable_nx(mod); in complete_formation()
3598 mod->state = MODULE_STATE_COMING; in complete_formation()
3608 static int prepare_coming_module(struct module *mod) in prepare_coming_module() argument
3612 ftrace_module_enable(mod); in prepare_coming_module()
3613 err = klp_module_coming(mod); in prepare_coming_module()
3618 MODULE_STATE_COMING, mod); in prepare_coming_module()
3625 struct module *mod = arg; in unknown_module_param_cb() local
3629 mod->async_probe_requested = true; in unknown_module_param_cb()
3645 struct module *mod; in load_module() local
3671 if (!check_modstruct_version(info, info->mod)) { in load_module()
3677 mod = layout_and_allocate(info, flags); in load_module()
3678 if (IS_ERR(mod)) { in load_module()
3679 err = PTR_ERR(mod); in load_module()
3683 audit_log_kern_module(mod->name); in load_module()
3686 err = add_unformed_module(mod); in load_module()
3691 mod->sig_ok = info->sig_ok; in load_module()
3692 if (!mod->sig_ok) { in load_module()
3695 "kernel\n", mod->name); in load_module()
3696 add_taint_module(mod, TAINT_UNSIGNED_MODULE, LOCKDEP_STILL_OK); in load_module()
3701 err = percpu_modalloc(mod, info); in load_module()
3706 err = module_unload_init(mod); in load_module()
3710 init_param_lock(mod); in load_module()
3714 err = find_module_sections(mod, info); in load_module()
3718 err = check_module_license_and_versions(mod); in load_module()
3723 setup_modinfo(mod, info); in load_module()
3726 err = simplify_symbols(mod, info); in load_module()
3730 err = apply_relocations(mod, info); in load_module()
3734 err = post_relocation(mod, info); in load_module()
3738 flush_module_icache(mod); in load_module()
3741 mod->args = strndup_user(uargs, ~0UL >> 1); in load_module()
3742 if (IS_ERR(mod->args)) { in load_module()
3743 err = PTR_ERR(mod->args); in load_module()
3747 dynamic_debug_setup(mod, info->debug, info->num_debug); in load_module()
3750 ftrace_module_init(mod); in load_module()
3753 err = complete_formation(mod, info); in load_module()
3757 err = prepare_coming_module(mod); in load_module()
3762 after_dashes = parse_args(mod->name, mod->args, mod->kp, mod->num_kp, in load_module()
3763 -32768, 32767, mod, in load_module()
3770 mod->name, after_dashes); in load_module()
3774 err = mod_sysfs_setup(mod, info, mod->kp, mod->num_kp); in load_module()
3778 if (is_livepatch_module(mod)) { in load_module()
3779 err = copy_module_elf(mod, info); in load_module()
3788 trace_module_load(mod); in load_module()
3790 return do_init_module(mod); in load_module()
3793 mod_sysfs_teardown(mod); in load_module()
3795 mod->state = MODULE_STATE_GOING; in load_module()
3796 destroy_params(mod->kp, mod->num_kp); in load_module()
3798 MODULE_STATE_GOING, mod); in load_module()
3799 klp_module_going(mod); in load_module()
3803 module_bug_cleanup(mod); in load_module()
3807 module_disable_ro(mod); in load_module()
3808 module_disable_nx(mod); in load_module()
3811 ftrace_release_mod(mod); in load_module()
3812 dynamic_debug_remove(mod, info->debug); in load_module()
3814 kfree(mod->args); in load_module()
3816 module_arch_cleanup(mod); in load_module()
3818 free_modinfo(mod); in load_module()
3820 module_unload_free(mod); in load_module()
3824 list_del_rcu(&mod->list); in load_module()
3825 mod_tree_remove(mod); in load_module()
3832 lockdep_free_key_range(mod->core_layout.base, mod->core_layout.size); in load_module()
3834 module_deallocate(mod, info); in load_module()
3910 static const char *get_ksymbol(struct module *mod, in get_ksymbol() argument
3917 struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms); in get_ksymbol()
3920 if (within_module_init(addr, mod)) in get_ksymbol()
3921 nextval = (unsigned long)mod->init_layout.base+mod->init_layout.text_size; in get_ksymbol()
3923 nextval = (unsigned long)mod->core_layout.base+mod->core_layout.text_size; in get_ksymbol()
3955 void * __weak dereference_module_function_descriptor(struct module *mod, in dereference_module_function_descriptor() argument
3970 struct module *mod; in module_address_lookup() local
3973 mod = __module_address(addr); in module_address_lookup()
3974 if (mod) { in module_address_lookup()
3976 *modname = mod->name; in module_address_lookup()
3977 ret = get_ksymbol(mod, addr, size, offset); in module_address_lookup()
3991 struct module *mod; in lookup_module_symbol_name() local
3994 list_for_each_entry_rcu(mod, &modules, list) { in lookup_module_symbol_name()
3995 if (mod->state == MODULE_STATE_UNFORMED) in lookup_module_symbol_name()
3997 if (within_module(addr, mod)) { in lookup_module_symbol_name()
4000 sym = get_ksymbol(mod, addr, NULL, NULL); in lookup_module_symbol_name()
4016 struct module *mod; in lookup_module_symbol_attrs() local
4019 list_for_each_entry_rcu(mod, &modules, list) { in lookup_module_symbol_attrs()
4020 if (mod->state == MODULE_STATE_UNFORMED) in lookup_module_symbol_attrs()
4022 if (within_module(addr, mod)) { in lookup_module_symbol_attrs()
4025 sym = get_ksymbol(mod, addr, size, offset); in lookup_module_symbol_attrs()
4029 strlcpy(modname, mod->name, MODULE_NAME_LEN); in lookup_module_symbol_attrs()
4044 struct module *mod; in module_get_kallsym() local
4047 list_for_each_entry_rcu(mod, &modules, list) { in module_get_kallsym()
4050 if (mod->state == MODULE_STATE_UNFORMED) in module_get_kallsym()
4052 kallsyms = rcu_dereference_sched(mod->kallsyms); in module_get_kallsym()
4057 strlcpy(module_name, mod->name, MODULE_NAME_LEN); in module_get_kallsym()
4058 *exported = is_exported(name, *value, mod); in module_get_kallsym()
4068 static unsigned long mod_find_symname(struct module *mod, const char *name) in mod_find_symname() argument
4071 struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms); in mod_find_symname()
4083 struct module *mod; in module_kallsyms_lookup_name() local
4090 if ((mod = find_module_all(name, colon - name, false)) != NULL) in module_kallsyms_lookup_name()
4091 ret = mod_find_symname(mod, colon+1); in module_kallsyms_lookup_name()
4093 list_for_each_entry_rcu(mod, &modules, list) { in module_kallsyms_lookup_name()
4094 if (mod->state == MODULE_STATE_UNFORMED) in module_kallsyms_lookup_name()
4096 if ((ret = mod_find_symname(mod, name)) != 0) in module_kallsyms_lookup_name()
4108 struct module *mod; in module_kallsyms_on_each_symbol() local
4114 list_for_each_entry(mod, &modules, list) { in module_kallsyms_on_each_symbol()
4116 struct mod_kallsyms *kallsyms = mod->kallsyms; in module_kallsyms_on_each_symbol()
4118 if (mod->state == MODULE_STATE_UNFORMED) in module_kallsyms_on_each_symbol()
4126 mod, kallsyms->symtab[i].st_value); in module_kallsyms_on_each_symbol()
4139 static char *module_flags(struct module *mod, char *buf) in module_flags() argument
4143 BUG_ON(mod->state == MODULE_STATE_UNFORMED); in module_flags()
4144 if (mod->taints || in module_flags()
4145 mod->state == MODULE_STATE_GOING || in module_flags()
4146 mod->state == MODULE_STATE_COMING) { in module_flags()
4148 bx += module_flags_taint(mod, buf + bx); in module_flags()
4150 if (mod->state == MODULE_STATE_GOING) in module_flags()
4153 if (mod->state == MODULE_STATE_COMING) in module_flags()
4182 struct module *mod = list_entry(p, struct module, list); in m_show() local
4187 if (mod->state == MODULE_STATE_UNFORMED) in m_show()
4191 mod->name, mod->init_layout.size + mod->core_layout.size); in m_show()
4192 print_unload_info(m, mod); in m_show()
4196 mod->state == MODULE_STATE_GOING ? "Unloading" : in m_show()
4197 mod->state == MODULE_STATE_COMING ? "Loading" : in m_show()
4200 value = m->private ? NULL : mod->core_layout.base; in m_show()
4204 if (mod->taints) in m_show()
4205 seq_printf(m, " %s", module_flags(mod, buf)); in m_show()
4261 struct module *mod; in search_module_extables() local
4264 mod = __module_address(addr); in search_module_extables()
4265 if (!mod) in search_module_extables()
4268 if (!mod->num_exentries) in search_module_extables()
4271 e = search_extable(mod->extable, in search_module_extables()
4272 mod->num_exentries, in search_module_extables()
4311 struct module *mod; in __module_address() local
4318 mod = mod_find(addr); in __module_address()
4319 if (mod) { in __module_address()
4320 BUG_ON(!within_module(addr, mod)); in __module_address()
4321 if (mod->state == MODULE_STATE_UNFORMED) in __module_address()
4322 mod = NULL; in __module_address()
4324 return mod; in __module_address()
4356 struct module *mod = __module_address(addr); in __module_text_address() local
4357 if (mod) { in __module_text_address()
4359 if (!within(addr, mod->init_layout.base, mod->init_layout.text_size) in __module_text_address()
4360 && !within(addr, mod->core_layout.base, mod->core_layout.text_size)) in __module_text_address()
4361 mod = NULL; in __module_text_address()
4363 return mod; in __module_text_address()
4370 struct module *mod; in print_modules() local
4376 list_for_each_entry_rcu(mod, &modules, list) { in print_modules()
4377 if (mod->state == MODULE_STATE_UNFORMED) in print_modules()
4379 pr_cont(" %s%s", mod->name, module_flags(mod, buf)); in print_modules()
4390 void module_layout(struct module *mod, in module_layout() argument