mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
module: ensure that kobject_put() is safe for module type kobjects
commit a6aeb739974ec73e5217c75a7c008a688d3d5cf1 upstream.
In 'lookup_or_create_module_kobject()', an internal kobject is created
using 'module_ktype'. So call to 'kobject_put()' on error handling
path causes an attempt to use an uninitialized completion pointer in
'module_kobject_release()'. In this scenario, we just want to release
kobject without an extra synchronization required for a regular module
unloading process, so adding an extra check whether 'complete()' is
actually required makes 'kobject_put()' safe.
Reported-by: syzbot+7fb8a372e1f6add936dd@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=7fb8a372e1f6add936dd
Fixes: 942e443127 ("module: Fix mod->mkobj.kobj potentially freed too early")
Cc: stable@vger.kernel.org
Suggested-by: Petr Pavlu <petr.pavlu@suse.com>
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Link: https://lore.kernel.org/r/20250507065044.86529-1-dmantipov@yandex.ru
Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8b02f85e84
commit
9e7b49ce4f
@@ -945,7 +945,9 @@ int module_sysfs_initialized;
|
|||||||
static void module_kobj_release(struct kobject *kobj)
|
static void module_kobj_release(struct kobject *kobj)
|
||||||
{
|
{
|
||||||
struct module_kobject *mk = to_module_kobject(kobj);
|
struct module_kobject *mk = to_module_kobject(kobj);
|
||||||
complete(mk->kobj_completion);
|
|
||||||
|
if (mk->kobj_completion)
|
||||||
|
complete(mk->kobj_completion);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct kobj_type module_ktype = {
|
struct kobj_type module_ktype = {
|
||||||
|
|||||||
Reference in New Issue
Block a user