diff options
author | Jiri Kosina <jkosina@suse.cz> | 2017-05-01 21:49:28 +0200 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2017-05-01 21:49:28 +0200 |
commit | a0841609f658c77f066af9c61a2e13143564fcb4 (patch) | |
tree | 0f0df468b6f852501cd4ed1570701e695b9f5d56 /samples | |
parent | 77f8f39a2e463eca89a19b916189d0e4e38f75d8 (diff) | |
parent | e679af627fe875a51d40b9a2b17f08fbde36e0e2 (diff) | |
download | lwn-a0841609f658c77f066af9c61a2e13143564fcb4.tar.gz lwn-a0841609f658c77f066af9c61a2e13143564fcb4.zip |
Merge branches 'for-4.12/upstream' and 'for-4.12/klp-hybrid-consistency-model' into for-linus
Diffstat (limited to 'samples')
-rw-r--r-- | samples/livepatch/livepatch-sample.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/samples/livepatch/livepatch-sample.c b/samples/livepatch/livepatch-sample.c index e34f871e69b1..84795223f15f 100644 --- a/samples/livepatch/livepatch-sample.c +++ b/samples/livepatch/livepatch-sample.c @@ -17,6 +17,8 @@ * along with this program; if not, see <http://www.gnu.org/licenses/>. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include <linux/module.h> #include <linux/kernel.h> #include <linux/livepatch.h> @@ -69,6 +71,21 @@ static int livepatch_init(void) { int ret; + if (!klp_have_reliable_stack() && !patch.immediate) { + /* + * WARNING: Be very careful when using 'patch.immediate' in + * your patches. It's ok to use it for simple patches like + * this, but for more complex patches which change function + * semantics, locking semantics, or data structures, it may not + * be safe. Use of this option will also prevent removal of + * the patch. + * + * See Documentation/livepatch/livepatch.txt for more details. + */ + patch.immediate = true; + pr_notice("The consistency model isn't supported for your architecture. Bypassing safety mechanisms and applying the patch immediately.\n"); + } + ret = klp_register_patch(&patch); if (ret) return ret; @@ -82,7 +99,6 @@ static int livepatch_init(void) static void livepatch_exit(void) { - WARN_ON(klp_disable_patch(&patch)); WARN_ON(klp_unregister_patch(&patch)); } |