diff options
Diffstat (limited to 'samples/livepatch/livepatch-sample.c')
| -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 @@ | |||
| 17 | * along with this program; if not, see <http://www.gnu.org/licenses/>. | 17 | * along with this program; if not, see <http://www.gnu.org/licenses/>. |
| 18 | */ | 18 | */ |
| 19 | 19 | ||
| 20 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
| 21 | |||
| 20 | #include <linux/module.h> | 22 | #include <linux/module.h> |
| 21 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
| 22 | #include <linux/livepatch.h> | 24 | #include <linux/livepatch.h> |
| @@ -69,6 +71,21 @@ static int livepatch_init(void) | |||
| 69 | { | 71 | { |
| 70 | int ret; | 72 | int ret; |
| 71 | 73 | ||
| 74 | if (!klp_have_reliable_stack() && !patch.immediate) { | ||
| 75 | /* | ||
| 76 | * WARNING: Be very careful when using 'patch.immediate' in | ||
| 77 | * your patches. It's ok to use it for simple patches like | ||
| 78 | * this, but for more complex patches which change function | ||
| 79 | * semantics, locking semantics, or data structures, it may not | ||
| 80 | * be safe. Use of this option will also prevent removal of | ||
| 81 | * the patch. | ||
| 82 | * | ||
| 83 | * See Documentation/livepatch/livepatch.txt for more details. | ||
| 84 | */ | ||
| 85 | patch.immediate = true; | ||
| 86 | pr_notice("The consistency model isn't supported for your architecture. Bypassing safety mechanisms and applying the patch immediately.\n"); | ||
| 87 | } | ||
| 88 | |||
| 72 | ret = klp_register_patch(&patch); | 89 | ret = klp_register_patch(&patch); |
| 73 | if (ret) | 90 | if (ret) |
| 74 | return ret; | 91 | return ret; |
| @@ -82,7 +99,6 @@ static int livepatch_init(void) | |||
| 82 | 99 | ||
| 83 | static void livepatch_exit(void) | 100 | static void livepatch_exit(void) |
| 84 | { | 101 | { |
| 85 | WARN_ON(klp_disable_patch(&patch)); | ||
| 86 | WARN_ON(klp_unregister_patch(&patch)); | 102 | WARN_ON(klp_unregister_patch(&patch)); |
| 87 | } | 103 | } |
| 88 | 104 | ||
