diff options
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/module.c b/kernel/module.c index 6dbfad415d51..4b65fbb10bdc 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -53,6 +53,7 @@  #include <asm/sections.h>  #include <linux/tracepoint.h>  #include <linux/ftrace.h> +#include <linux/livepatch.h>  #include <linux/async.h>  #include <linux/percpu.h>  #include <linux/kmemleak.h> @@ -984,6 +985,7 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,  		mod->exit();  	blocking_notifier_call_chain(&module_notify_list,  				     MODULE_STATE_GOING, mod); +	klp_module_going(mod);  	ftrace_release_mod(mod);  	async_synchronize_full(); @@ -3315,6 +3317,7 @@ fail:  	module_put(mod);  	blocking_notifier_call_chain(&module_notify_list,  				     MODULE_STATE_GOING, mod); +	klp_module_going(mod);  	ftrace_release_mod(mod);  	free_module(mod);  	wake_up_all(&module_wq); @@ -3401,7 +3404,13 @@ out:  static int prepare_coming_module(struct module *mod)  { +	int err; +  	ftrace_module_enable(mod); +	err = klp_module_coming(mod); +	if (err) +		return err; +  	blocking_notifier_call_chain(&module_notify_list,  				     MODULE_STATE_COMING, mod);  	return 0; @@ -3553,6 +3562,7 @@ static int load_module(struct load_info *info, const char __user *uargs,   coming_cleanup:  	blocking_notifier_call_chain(&module_notify_list,  				     MODULE_STATE_GOING, mod); +	klp_module_going(mod);   bug_cleanup:  	/* module_bug_cleanup needs module_mutex protection */  |