aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/livepatch/core.c
diff options
context:
space:
mode:
authorMiroslav Benes <mbenes@suse.cz>2018-01-10 05:01:28 -0500
committerJiri Kosina <jkosina@suse.cz>2018-01-11 04:58:03 -0500
commitd0807da78e11d46f18399cbf8c4028c731346766 (patch)
tree7421d9d68ae0d159c816995564984a0c0cfcc26a /kernel/livepatch/core.c
parentc99a2be790b07752d8cc694434d3450afd4c5a00 (diff)
livepatch: Remove immediate feature
Immediate flag has been used to disable per-task consistency and patch all tasks immediately. It could be useful if the patch doesn't change any function or data semantics. However, it causes problems on its own. The consistency problem is currently broken with respect to immediate patches. func a patches 1i 2i 3 When the patch 3 is applied, only 2i function is checked (by stack checking facility). There might be a task sleeping in 1i though. Such task is migrated to 3, because we do not check 1i in klp_check_stack_func() at all. Coming atomic replace feature would be easier to implement and more reliable without immediate. Thus, remove immediate feature completely and save us from the problems. Note that force feature has the similar problem. However it is considered as a last resort. If used, administrator should not apply any new live patches and should plan for reboot into an updated kernel. The architectures would now need to provide HAVE_RELIABLE_STACKTRACE to fully support livepatch. Signed-off-by: Miroslav Benes <mbenes@suse.cz> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'kernel/livepatch/core.c')
-rw-r--r--kernel/livepatch/core.c12
1 files changed, 1 insertions, 11 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index 1c3c9b27c916..41be6061b92f 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -366,11 +366,6 @@ static int __klp_enable_patch(struct klp_patch *patch)
366 /* 366 /*
367 * A reference is taken on the patch module to prevent it from being 367 * A reference is taken on the patch module to prevent it from being
368 * unloaded. 368 * unloaded.
369 *
370 * Note: For immediate (no consistency model) patches we don't allow
371 * patch modules to unload since there is no safe/sane method to
372 * determine if a thread is still running in the patched code contained
373 * in the patch module once the ftrace registration is successful.
374 */ 369 */
375 if (!try_module_get(patch->mod)) 370 if (!try_module_get(patch->mod))
376 return -ENODEV; 371 return -ENODEV;
@@ -890,12 +885,7 @@ int klp_register_patch(struct klp_patch *patch)
890 if (!klp_initialized()) 885 if (!klp_initialized())
891 return -ENODEV; 886 return -ENODEV;
892 887
893 /* 888 if (!klp_have_reliable_stack()) {
894 * Architectures without reliable stack traces have to set
895 * patch->immediate because there's currently no way to patch kthreads
896 * with the consistency model.
897 */
898 if (!klp_have_reliable_stack() && !patch->immediate) {
899 pr_err("This architecture doesn't have support for the livepatch consistency model.\n"); 889 pr_err("This architecture doesn't have support for the livepatch consistency model.\n");
900 return -ENOSYS; 890 return -ENOSYS;
901 } 891 }