Re: [PATCH 1/2] livepatch: Fix kobject memleak

From: Greg Kroah-Hartman
Date: Tue Apr 30 2019 - 11:10:17 EST


On Tue, Apr 30, 2019 at 04:56:13PM +0200, Petr Mladek wrote:
> On Tue 2019-04-30 10:15:33, Tobin C. Harding wrote:
> > Currently error return from kobject_init_and_add() is not followed by a
> > call to kobject_put(). This means there is a memory leak.
>
> I see, the ref count is always initialized to 1 via:
>
> + kobject_init_and_add()
> + kobject_init()
> + kobject_init_internal()
> + kref_init()
>
>
> > Signed-off-by: Tobin C. Harding <tobin@xxxxxxxxxx>
> > ---
> > kernel/livepatch/core.c | 12 +++++++++---
> > 1 file changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> > index eb0ee10a1981..98a7bec41faa 100644
> > --- a/kernel/livepatch/core.c
> > +++ b/kernel/livepatch/core.c
> > @@ -727,7 +727,9 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func)
> > ret = kobject_init_and_add(&func->kobj, &klp_ktype_func,
> > &obj->kobj, "%s,%lu", func->old_name,
> > func->old_sympos ? func->old_sympos : 1);
> > - if (!ret)
> > + if (ret)
> > + kobject_put(&func->kobj);
> > + else
> > func->kobj_added = true;
>
> We could actually get rid of the custom kobj_added. Intead, we could
> check for kobj->state_initialized in the various klp_free* functions.

Why do you need to care about this at all anyway? The kobject can
handle it's own lifetime just fine (that's what it is there for), why do
you need to also track it?

thanks,

greg k-h