diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2017-11-15 10:53:24 +0100 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2017-11-15 10:54:27 +0100 |
| commit | fc41efc1843009ebcdb4850b21f1c371ad203f4e (patch) | |
| tree | 71878da67ed83e19ba6d5e30ebee72e6d3612760 /kernel/livepatch/core.h | |
| parent | cb65dc7b89043a66d4459a6a811645d43185b5f0 (diff) | |
| parent | 89a9a1c1c89cea5f70975c338c011b9f7024dee5 (diff) | |
| download | cachepc-linux-fc41efc1843009ebcdb4850b21f1c371ad203f4e.tar.gz cachepc-linux-fc41efc1843009ebcdb4850b21f1c371ad203f4e.zip | |
Merge branch 'for-4.15/callbacks' into for-linus
This pulls in an infrastructure/API that allows livepatch writers to
register pre-patch and post-patch callbacks that allow for running a
glue code necessary for finalizing the patching if necessary.
Conflicts:
kernel/livepatch/core.c
- trivial conflict by adding a callback call into
module going notifier vs. moving that code block
to klp_cleanup_module_patches_limited()
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'kernel/livepatch/core.h')
| -rw-r--r-- | kernel/livepatch/core.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/kernel/livepatch/core.h b/kernel/livepatch/core.h index c74f24c47837..cc3aa708e0b4 100644 --- a/kernel/livepatch/core.h +++ b/kernel/livepatch/core.h @@ -1,6 +1,46 @@ #ifndef _LIVEPATCH_CORE_H #define _LIVEPATCH_CORE_H +#include <linux/livepatch.h> + extern struct mutex klp_mutex; +static inline bool klp_is_object_loaded(struct klp_object *obj) +{ + return !obj->name || obj->mod; +} + +static inline int klp_pre_patch_callback(struct klp_object *obj) +{ + int ret = 0; + + if (obj->callbacks.pre_patch) + ret = (*obj->callbacks.pre_patch)(obj); + + obj->callbacks.post_unpatch_enabled = !ret; + + return ret; +} + +static inline void klp_post_patch_callback(struct klp_object *obj) +{ + if (obj->callbacks.post_patch) + (*obj->callbacks.post_patch)(obj); +} + +static inline void klp_pre_unpatch_callback(struct klp_object *obj) +{ + if (obj->callbacks.pre_unpatch) + (*obj->callbacks.pre_unpatch)(obj); +} + +static inline void klp_post_unpatch_callback(struct klp_object *obj) +{ + if (obj->callbacks.post_unpatch_enabled && + obj->callbacks.post_unpatch) + (*obj->callbacks.post_unpatch)(obj); + + obj->callbacks.post_unpatch_enabled = false; +} + #endif /* _LIVEPATCH_CORE_H */ |
