mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	module: remove module_text_address()
Impact: Replace and remove risky (non-EXPORTed) API module_text_address() returns a pointer to the module, which given locking improvements in module.c, is useless except to test for NULL: 1) If the module can't go away, use __module_text_address. 2) Otherwise, just use is_module_text_address(). Cc: linux-mtd@lists.infradead.org Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
		
							parent
							
								
									e610499e26
								
							
						
					
					
						commit
						a6e6abd575
					
				
					 4 changed files with 9 additions and 25 deletions
				
			
		| 
						 | 
					@ -2720,14 +2720,14 @@ int nand_scan_tail(struct mtd_info *mtd)
 | 
				
			||||||
	return chip->scan_bbt(mtd);
 | 
						return chip->scan_bbt(mtd);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* module_text_address() isn't exported, and it's mostly a pointless
 | 
					/* is_module_text_address() isn't exported, and it's mostly a pointless
 | 
				
			||||||
   test if this is a module _anyway_ -- they'd have to try _really_ hard
 | 
					   test if this is a module _anyway_ -- they'd have to try _really_ hard
 | 
				
			||||||
   to call us from in-kernel code if the core NAND support is modular. */
 | 
					   to call us from in-kernel code if the core NAND support is modular. */
 | 
				
			||||||
#ifdef MODULE
 | 
					#ifdef MODULE
 | 
				
			||||||
#define caller_is_module() (1)
 | 
					#define caller_is_module() (1)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define caller_is_module() \
 | 
					#define caller_is_module() \
 | 
				
			||||||
	module_text_address((unsigned long)__builtin_return_address(0))
 | 
						is_module_text_address((unsigned long)__builtin_return_address(0))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -362,8 +362,6 @@ static inline int module_is_live(struct module *mod)
 | 
				
			||||||
	return mod->state != MODULE_STATE_GOING;
 | 
						return mod->state != MODULE_STATE_GOING;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Is this address in a module? (second is with no locks, for oops) */
 | 
					 | 
				
			||||||
struct module *module_text_address(unsigned long addr);
 | 
					 | 
				
			||||||
struct module *__module_text_address(unsigned long addr);
 | 
					struct module *__module_text_address(unsigned long addr);
 | 
				
			||||||
struct module *__module_address(unsigned long addr);
 | 
					struct module *__module_address(unsigned long addr);
 | 
				
			||||||
bool is_module_address(unsigned long addr);
 | 
					bool is_module_address(unsigned long addr);
 | 
				
			||||||
| 
						 | 
					@ -496,11 +494,6 @@ search_module_extables(unsigned long addr)
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline struct module *module_text_address(unsigned long addr)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline struct module *__module_address(unsigned long addr)
 | 
					static inline struct module *__module_address(unsigned long addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,14 +58,14 @@ __notrace_funcgraph int __kernel_text_address(unsigned long addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (core_kernel_text(addr))
 | 
						if (core_kernel_text(addr))
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	return __module_text_address(addr) != NULL;
 | 
						return is_module_text_address(addr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int kernel_text_address(unsigned long addr)
 | 
					int kernel_text_address(unsigned long addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (core_kernel_text(addr))
 | 
						if (core_kernel_text(addr))
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	return module_text_address(addr) != NULL;
 | 
						return is_module_text_address(addr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -81,5 +81,5 @@ int func_ptr_is_kernel_text(void *ptr)
 | 
				
			||||||
	addr = (unsigned long) dereference_function_descriptor(ptr);
 | 
						addr = (unsigned long) dereference_function_descriptor(ptr);
 | 
				
			||||||
	if (core_kernel_text(addr))
 | 
						if (core_kernel_text(addr))
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	return module_text_address(addr) != NULL;
 | 
						return is_module_text_address(addr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -908,8 +908,10 @@ void symbol_put_addr(void *addr)
 | 
				
			||||||
	if (core_kernel_text((unsigned long)addr))
 | 
						if (core_kernel_text((unsigned long)addr))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(modaddr = module_text_address((unsigned long)addr)))
 | 
						/* module_text_address is safe here: we're supposed to have reference
 | 
				
			||||||
		BUG();
 | 
						 * to module from symbol_get, so it can't go away. */
 | 
				
			||||||
 | 
						modaddr = __module_text_address((unsigned long)addr);
 | 
				
			||||||
 | 
						BUG_ON(!modaddr);
 | 
				
			||||||
	module_put(modaddr);
 | 
						module_put(modaddr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(symbol_put_addr);
 | 
					EXPORT_SYMBOL_GPL(symbol_put_addr);
 | 
				
			||||||
| 
						 | 
					@ -2821,17 +2823,6 @@ struct module *__module_text_address(unsigned long addr)
 | 
				
			||||||
	return mod;
 | 
						return mod;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct module *module_text_address(unsigned long addr)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct module *mod;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	preempt_disable();
 | 
					 | 
				
			||||||
	mod = __module_text_address(addr);
 | 
					 | 
				
			||||||
	preempt_enable();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return mod;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Don't grab lock, we're oopsing. */
 | 
					/* Don't grab lock, we're oopsing. */
 | 
				
			||||||
void print_modules(void)
 | 
					void print_modules(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue