Re: [RESEND][PATCH v3 03/17] module: Properly propagate MODULE_STATE_COMING failure
From: Josh Poimboeuf <hidden>
Date: 2020-03-27 04:51:37
Also in:
lkml
On Wed, Mar 25, 2020 at 06:35:22PM +0100, Jessica Yu wrote:
quoted hunk
+++ Peter Zijlstra [24/03/20 14:56 +0100]:quoted
Now that notifiers got unbroken; use the proper interface to handle notifier errors and propagate them. There were already MODULE_STATE_COMING notifiers that failed; notably: - jump_label_module_notifier() - tracepoint_module_notify() - bpf_event_notify() By propagating this error, we fix those users. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: jeyu@kernel.org --- kernel/module.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)--- a/kernel/module.c +++ b/kernel/module.c@@ -3751,9 +3751,13 @@ static int prepare_coming_module(structif (err) return err; - blocking_notifier_call_chain(&module_notify_list, - MODULE_STATE_COMING, mod); - return 0; + err = blocking_notifier_call_chain_robust(&module_notify_list, + MODULE_STATE_COMING, MODULE_STATE_GOING, mod); + err = notifier_to_errno(err); + if (err) + klp_module_going(mod); + + return err; } static int unknown_module_param_cb(char *param, char *val, const char *modname,This looks fine to me - klp_module_going() is only called after successful klp_module_coming(), and klp_module_going() is fine with mod->state still being MODULE_STATE_COMING here. Would be good to have livepatch folks double check. Which reminds me - Miroslav had pointed out in the past that if there is an error when calling the COMING notifiers, the GOING notifiers will be called while the mod->state is still MODULE_STATE_COMING. I've briefly looked through all the module notifiers and it looks like nobody is looking at mod->state directly at least. Acked-by: Jessica Yu <jeyu@kernel.org>
Looks good to me. klp_module_going() is already called in other load_module() error scenarios so this should be fine from a livepatch standpoint. Acked-by: Josh Poimboeuf <redacted> -- Josh