mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-25 12:04:46 +08:00
fs: sysfs: Fix reference leak in sysfs_break_active_protection()
commita90bca2228
upstream. 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 <stern@rowland.harvard.edu> Fixes:2afc9166f7
("scsi: sysfs: Introduce sysfs_{un,}break_active_protection()") Cc: Bart Van Assche <bvanassche@acm.org> Cc: stable@vger.kernel.org Reviewed-by: Bart Van Assche <bvanassche@acm.org> Acked-by: Tejun Heo <tj@kernel.org> Link: https://lore.kernel.org/r/8a4d3f0f-c5e3-4b70-a188-0ca433f9e6f9@rowland.harvard.edu Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0d130158db
commit
43f00210cb
@ -440,6 +440,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);
|
||||
|
Loading…
Reference in New Issue
Block a user