summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-09-30 13:37:48 +0100
committerMark Brown <broonie@kernel.org>2026-09-30 13:37:48 +0100
commite735105ccfbe674f2a1179901ec47a72e28d06c7 (patch)
treec241e1c606945f24f5c2b9c9ae4080d483d30fc4 /kernel
parent5d7eb38dad60807de7b260306561ae8721de27a5 (diff)
parent5d791d3396ca4c9e5fd9d20b49386c20d8179eb8 (diff)
downloadlinux-next-e735105ccfbe674f2a1179901ec47a72e28d06c7.tar.gz
linux-next-e735105ccfbe674f2a1179901ec47a72e28d06c7.zip
Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/livepatching/livepatching.git
Diffstat (limited to 'kernel')
-rw-r--r--kernel/livepatch/core.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index a240d1144e89..517fe427ff92 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -646,12 +646,15 @@ static const struct kobj_type klp_ktype_patch = {
static void klp_kobj_release_object(struct kobject *kobj)
{
+ struct klp_patch *patch;
struct klp_object *obj;
obj = container_of(kobj, struct klp_object, kobj);
+ patch = obj->patch;
if (obj->dynamic)
klp_free_object_dynamic(obj);
+ kobject_put(&patch->kobj);
}
static const struct kobj_type klp_ktype_object = {
@@ -662,12 +665,15 @@ static const struct kobj_type klp_ktype_object = {
static void klp_kobj_release_func(struct kobject *kobj)
{
+ struct klp_object *obj;
struct klp_func *func;
func = container_of(kobj, struct klp_func, kobj);
+ obj = func->obj;
if (func->nop)
klp_free_func_nop(func);
+ kobject_put(&obj->kobj);
}
static const struct kobj_type klp_ktype_func = {
@@ -943,7 +949,9 @@ static void klp_init_func_early(struct klp_object *obj,
struct klp_func *func)
{
kobject_init(&func->kobj, &klp_ktype_func);
+ kobject_get(&obj->kobj);
list_add_tail(&func->node, &obj->func_list);
+ func->obj = obj;
}
static void klp_init_object_early(struct klp_patch *patch,
@@ -951,7 +959,9 @@ static void klp_init_object_early(struct klp_patch *patch,
{
INIT_LIST_HEAD(&obj->func_list);
kobject_init(&obj->kobj, &klp_ktype_object);
+ kobject_get(&patch->kobj);
list_add_tail(&obj->node, &patch->obj_list);
+ obj->patch = patch;
}
static void klp_init_patch_early(struct klp_patch *patch)