4590 lines · 117.2 KB · C
RawDownload
 * module doesn't get freed during this. */struct module *__module_address(unsigned long addr){	struct module *mod; 	if (addr < module_addr_min || addr > module_addr_max)		return NULL; 	module_assert_mutex_or_preempt(); 	mod = mod_find(addr);	if (mod) {		BUG_ON(!within_module(addr, mod));		if (mod->state == MODULE_STATE_UNFORMED)			mod = NULL;	}	return mod;} /* * is_module_text_address - is this address inside module code? * @addr: the address to check. * * See is_module_address() if you simply want to see if the address is * anywhere in a module.  See kernel_text_address() for testing if an * address corresponds to kernel or module code. */bool is_module_text_address(unsigned long addr){	bool ret; 	preempt_disable();	ret = __module_text_address(addr) != NULL;	preempt_enable(); 	return ret;} /* * __module_text_address - get the module whose code contains an address. * @addr: the address. * * Must be called with preempt disabled or module mutex held so that * module doesn't get freed during this. */struct module *__module_text_address(unsigned long addr){	struct module *mod = __module_address(addr);	if (mod) {		/* Make sure it's within the text section. */		if (!within(addr, mod->init_layout.base, mod->init_layout.text_size)		    && !within(addr, mod->core_layout.base, mod->core_layout.text_size))			mod = NULL;	}	return mod;} /* Don't grab lock, we're oopsing. */void print_modules(void){	struct module *mod;	char buf[MODULE_FLAGS_BUF_SIZE]; 	printk(KERN_DEFAULT "Modules linked in:");	/* Most callers should already have preempt disabled, but make sure */	preempt_disable();	list_for_each_entry_rcu(mod, &modules, list) {		if (mod->state == MODULE_STATE_UNFORMED)			continue;		pr_cont(" %s%s", mod->name, module_flags(mod, buf));	}	preempt_enable();	if (last_unloaded_module[0])		pr_cont(" [last unloaded: %s]", last_unloaded_module);	pr_cont("\n");} #ifdef CONFIG_MODVERSIONS/* Generate the signature for all relevant module structures here. * If these change, we don't want to try to parse the module. */void module_layout(struct module *mod,		   struct modversion_info *ver,		   struct kernel_param *kp,		   struct kernel_symbol *ks,		   struct tracepoint * const *tp){}EXPORT_SYMBOL(module_layout);#endif

Lines 4501–4590 of 4590. Previous lines