]> Git Repo - J-linux.git/commitdiff
fs: sysfs: Fix reference leak in sysfs_break_active_protection()
authorAlan Stern <[email protected]>
Wed, 13 Mar 2024 21:43:41 +0000 (17:43 -0400)
committerGreg Kroah-Hartman <[email protected]>
Thu, 11 Apr 2024 13:16:48 +0000 (15:16 +0200)
The sysfs_break_active_protection() routine has an obvious reference
leak in its error path.  If the call to kernfs_find_and_get() fails then
kn will be NULL, so the companion sysfs_unbreak_active_protection()
routine won't get called (and would only cause an access violation by
trying to dereference kn->parent if it was called).  As a result, the
reference to kobj acquired at the start of the function will never be
released.

Fix the leak by adding an explicit kobject_put() call when kn is NULL.

Signed-off-by: Alan Stern <[email protected]>
Fixes: 2afc9166f79b ("scsi: sysfs: Introduce sysfs_{un,}break_active_protection()")
Cc: Bart Van Assche <[email protected]>
Cc: [email protected]
Reviewed-by: Bart Van Assche <[email protected]>
Acked-by: Tejun Heo <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
fs/sysfs/file.c

index 6b7652fb805057b8a155a0c94a3746fcb72eb5c7..7cd64021d453de7494f974ee21b77bc9a0838a35 100644 (file)
@@ -463,6 +463,8 @@ struct kernfs_node *sysfs_break_active_protection(struct kobject *kobj,
        kn = kernfs_find_and_get(kobj->sd, attr->name);
        if (kn)
                kernfs_break_active_protection(kn);
+       else
+               kobject_put(kobj);
        return kn;
 }
 EXPORT_SYMBOL_GPL(sysfs_break_active_protection);
This page took 0.050072 seconds and 4 git commands to generate.