Lines Matching refs:patch
25 #include "patch.h"
71 * Note that the patch might still be needed before klp_module_going()
102 static struct klp_object *klp_find_object(struct klp_patch *patch,
107 klp_for_each_object(patch, obj) {
345 * /sys/kernel/livepatch/<patch>
346 * /sys/kernel/livepatch/<patch>/enabled
347 * /sys/kernel/livepatch/<patch>/transition
348 * /sys/kernel/livepatch/<patch>/force
349 * /sys/kernel/livepatch/<patch>/<object>
350 * /sys/kernel/livepatch/<patch>/<object>/patched
351 * /sys/kernel/livepatch/<patch>/<object>/<function,sympos>
353 static int __klp_disable_patch(struct klp_patch *patch);
358 struct klp_patch *patch;
366 patch = container_of(kobj, struct klp_patch, kobj);
370 if (patch->enabled == enabled) {
381 * Do not allow to re-enable a disabled patch.
383 if (patch == klp_transition_patch)
386 ret = __klp_disable_patch(patch);
401 struct klp_patch *patch;
403 patch = container_of(kobj, struct klp_patch, kobj);
404 return snprintf(buf, PAGE_SIZE-1, "%d\n", patch->enabled);
410 struct klp_patch *patch;
412 patch = container_of(kobj, struct klp_patch, kobj);
414 patch == klp_transition_patch);
420 struct klp_patch *patch;
433 patch = container_of(kobj, struct klp_patch, kobj);
434 if (patch != klp_transition_patch) {
481 static void klp_init_object_early(struct klp_patch *patch,
485 struct klp_patch *patch)
501 klp_init_object_early(patch, obj);
541 static int klp_add_object_nops(struct klp_patch *patch,
547 obj = klp_find_object(patch, old_obj);
550 obj = klp_alloc_object_dynamic(old_obj->name, patch);
571 * patch to facilitate a 'replace' mode.
573 static int klp_add_nops(struct klp_patch *patch)
582 err = klp_add_object_nops(patch, old_obj);
593 struct klp_patch *patch;
595 patch = container_of(kobj, struct klp_patch, kobj);
596 complete(&patch->finish);
664 static void __klp_free_objects(struct klp_patch *patch, bool nops_only)
668 klp_for_each_object_safe(patch, obj, tmp_obj) {
679 static void klp_free_objects(struct klp_patch *patch)
681 __klp_free_objects(patch, false);
684 static void klp_free_objects_dynamic(struct klp_patch *patch)
686 __klp_free_objects(patch, true);
696 static void klp_free_patch_start(struct klp_patch *patch)
698 if (!list_empty(&patch->list))
699 list_del(&patch->list);
701 klp_free_objects(patch);
709 * the last function accessing the livepatch structures when the patch
712 static void klp_free_patch_finish(struct klp_patch *patch)
717 * this is called when the patch gets disabled and it
720 kobject_put(&patch->kobj);
721 wait_for_completion(&patch->finish);
724 if (!patch->forced)
725 module_put(patch->mod);
729 * The livepatch might be freed from sysfs interface created by the patch.
735 struct klp_patch *patch =
738 klp_free_patch_finish(patch);
741 void klp_free_patch_async(struct klp_patch *patch)
743 klp_free_patch_start(patch);
744 schedule_work(&patch->free_work);
787 static int klp_write_object_relocs(struct klp_patch *patch,
792 struct klp_modinfo *info = patch->mod->klp_info;
800 ret = klp_write_section_relocs(patch->mod, info->sechdrs,
802 patch->mod->core_kallsyms.strtab,
811 static int klp_apply_object_relocs(struct klp_patch *patch,
814 return klp_write_object_relocs(patch, obj, true);
817 static void klp_clear_object_relocs(struct klp_patch *patch,
820 klp_write_object_relocs(patch, obj, false);
824 static int klp_init_object_loaded(struct klp_patch *patch,
837 ret = klp_apply_object_relocs(patch, obj);
872 static int klp_init_object(struct klp_patch *patch, struct klp_object *obj)
887 ret = kobject_add(&obj->kobj, &patch->kobj, "%s", name);
898 ret = klp_init_object_loaded(patch, obj);
910 static void klp_init_object_early(struct klp_patch *patch,
915 list_add_tail(&obj->node, &patch->obj_list);
918 static void klp_init_patch_early(struct klp_patch *patch)
923 INIT_LIST_HEAD(&patch->list);
924 INIT_LIST_HEAD(&patch->obj_list);
925 kobject_init(&patch->kobj, &klp_ktype_patch);
926 patch->enabled = false;
927 patch->forced = false;
928 INIT_WORK(&patch->free_work, klp_free_patch_work_fn);
929 init_completion(&patch->finish);
931 klp_for_each_object_static(patch, obj) {
932 klp_init_object_early(patch, obj);
940 static int klp_init_patch(struct klp_patch *patch)
945 ret = kobject_add(&patch->kobj, klp_root_kobj, "%s", patch->mod->name);
949 if (patch->replace) {
950 ret = klp_add_nops(patch);
955 klp_for_each_object(patch, obj) {
956 ret = klp_init_object(patch, obj);
961 list_add_tail(&patch->list, &klp_patches);
966 static int __klp_disable_patch(struct klp_patch *patch)
970 if (WARN_ON(!patch->enabled))
976 klp_init_transition(patch, KLP_UNPATCHED);
978 klp_for_each_object(patch, obj)
992 patch->enabled = false;
998 static int __klp_enable_patch(struct klp_patch *patch)
1006 if (WARN_ON(patch->enabled))
1009 pr_notice("enabling patch '%s'\n", patch->mod->name);
1011 klp_init_transition(patch, KLP_PATCHED);
1022 klp_for_each_object(patch, obj) {
1028 pr_warn("pre-patch callback failed for object '%s'\n",
1035 pr_warn("failed to patch object '%s'\n",
1042 patch->enabled = true;
1047 pr_warn("failed to enable patch '%s'\n", patch->mod->name);
1055 * @patch: patch to be enabled
1057 * Initializes the data structure associated with the patch, creates the sysfs
1066 int klp_enable_patch(struct klp_patch *patch)
1071 if (!patch || !patch->mod || !patch->objs)
1074 klp_for_each_object_static(patch, obj) {
1080 if (!is_livepatch_module(patch->mod)) {
1082 patch->mod->name);
1096 if (!klp_is_patch_compatible(patch)) {
1097 pr_err("Livepatch patch (%s) is not compatible with the already installed livepatches.\n",
1098 patch->mod->name);
1103 if (!try_module_get(patch->mod)) {
1108 klp_init_patch_early(patch);
1110 ret = klp_init_patch(patch);
1114 ret = __klp_enable_patch(patch);
1123 klp_free_patch_start(patch);
1127 klp_free_patch_finish(patch);
1143 * klp_ftrace_handler() might still see the replaced patch on the stack.
1146 * this is handled transparently by patch->module_put.
1191 struct klp_patch *patch;
1194 klp_for_each_patch(patch) {
1195 if (patch == limit)
1198 klp_for_each_object(patch, obj) {
1202 if (patch != klp_transition_patch)
1205 pr_notice("reverting patch '%s' on unloading module '%s'\n",
1206 patch->mod->name, obj->mod->name);
1210 klp_clear_object_relocs(patch, obj);
1220 struct klp_patch *patch;
1235 * get patched by a new patch.
1239 klp_for_each_patch(patch) {
1240 klp_for_each_object(patch, obj) {
1246 ret = klp_init_object_loaded(patch, obj);
1248 pr_warn("failed to initialize patch '%s' for module '%s' (%d)\n",
1249 patch->mod->name, obj->mod->name, ret);
1253 pr_notice("applying patch '%s' to loading module '%s'\n",
1254 patch->mod->name, obj->mod->name);
1258 pr_warn("pre-patch callback failed for object '%s'\n",
1265 pr_warn("failed to apply patch '%s' to module '%s' (%d)\n",
1266 patch->mod->name, obj->mod->name, ret);
1272 if (patch != klp_transition_patch)
1285 * If a patch is unsuccessfully applied, return
1288 pr_warn("patch '%s' failed for module '%s', refusing to load module '%s'\n",
1289 patch->mod->name, obj->mod->name, obj->mod->name);
1292 klp_cleanup_module_patches_limited(mod, patch);
1308 * get patched by a new patch.