mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 23:27:06 +00:00
platform/x86: hp-bioscfg: Fix reference leak
If a duplicate attribute is found using kset_find_obj(), a reference to that attribute is returned which needs to be disposed accordingly using kobject_put(). Use kobject_put() to dispose the duplicate attribute in such a case. As a side note, a very similar bug was fixed in commit7295a996fd
("platform/x86: dell-sysman: Fix reference leak"), so it seems that the bug was copied from that driver. Compile-tested only. Fixes:a34fc329b1
("platform/x86: hp-bioscfg: bioscfg") Suggested-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Armin Wolf <W_Armin@gmx.de> Reviewed-by: Jorge Lopez <jorge.lopez2@hp.com> Link: https://lore.kernel.org/r/20230925142819.74525-3-W_Armin@gmx.de Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
528ab3e605
commit
981368e144
1 changed files with 10 additions and 4 deletions
|
@ -659,7 +659,7 @@ static int hp_init_bios_package_attribute(enum hp_wmi_data_type attr_type,
|
|||
const char *guid, int min_elements,
|
||||
int instance_id)
|
||||
{
|
||||
struct kobject *attr_name_kobj;
|
||||
struct kobject *attr_name_kobj, *duplicate;
|
||||
union acpi_object *elements;
|
||||
struct kset *temp_kset;
|
||||
|
||||
|
@ -704,8 +704,11 @@ static int hp_init_bios_package_attribute(enum hp_wmi_data_type attr_type,
|
|||
}
|
||||
|
||||
/* All duplicate attributes found are ignored */
|
||||
if (kset_find_obj(temp_kset, str_value)) {
|
||||
duplicate = kset_find_obj(temp_kset, str_value);
|
||||
if (duplicate) {
|
||||
pr_debug("Duplicate attribute name found - %s\n", str_value);
|
||||
/* kset_find_obj() returns a reference */
|
||||
kobject_put(duplicate);
|
||||
goto pack_attr_exit;
|
||||
}
|
||||
|
||||
|
@ -768,7 +771,7 @@ static int hp_init_bios_buffer_attribute(enum hp_wmi_data_type attr_type,
|
|||
const char *guid, int min_elements,
|
||||
int instance_id)
|
||||
{
|
||||
struct kobject *attr_name_kobj;
|
||||
struct kobject *attr_name_kobj, *duplicate;
|
||||
struct kset *temp_kset;
|
||||
char str[MAX_BUFF_SIZE];
|
||||
|
||||
|
@ -794,8 +797,11 @@ static int hp_init_bios_buffer_attribute(enum hp_wmi_data_type attr_type,
|
|||
temp_kset = bioscfg_drv.main_dir_kset;
|
||||
|
||||
/* All duplicate attributes found are ignored */
|
||||
if (kset_find_obj(temp_kset, str)) {
|
||||
duplicate = kset_find_obj(temp_kset, str);
|
||||
if (duplicate) {
|
||||
pr_debug("Duplicate attribute name found - %s\n", str);
|
||||
/* kset_find_obj() returns a reference */
|
||||
kobject_put(duplicate);
|
||||
goto buff_attr_exit;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue