1. acpi_object *obj is unused in this function, so delete it, also delete a unnecessary kfree(obj); 2. Fix a memory leak of 'attr_name_kobj' in the error handling path. 3. When kobject_init_and_add() fails on every subsequent error path call kobject_put() to cleanup. Fixes: a34fc329b189 ("platform/x86: hp-bioscfg: bioscfg") Reported-by: kernel test robot <lkp@xxxxxxxxx> Reported-by: Dan Carpenter <error27@xxxxxxxxx> Closes: https://lore.kernel.org/r/202309201412.on0VXJGo-lkp@xxxxxxxxx/ Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx> --- This is only compile tested, based on static analysis. --- drivers/platform/x86/hp/hp-bioscfg/bioscfg.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c index 5798b49ddaba..b28e52b64690 100644 --- a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c +++ b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c @@ -588,7 +588,6 @@ static void release_attributes_data(void) static int hp_add_other_attributes(int attr_type) { struct kobject *attr_name_kobj; - union acpi_object *obj = NULL; int ret; char *attr_name; @@ -596,8 +595,8 @@ static int hp_add_other_attributes(int attr_type) attr_name_kobj = kzalloc(sizeof(*attr_name_kobj), GFP_KERNEL); if (!attr_name_kobj) { - ret = -ENOMEM; - goto err_other_attr_init; + mutex_unlock(&bioscfg_drv.mutex); + return -ENOMEM; } /* Check if attribute type is supported */ @@ -614,15 +613,15 @@ static int hp_add_other_attributes(int attr_type) default: pr_err("Error: Unknown attr_type: %d\n", attr_type); - ret = -EINVAL; - goto err_other_attr_init; + kfree(attr_name_kobj); + mutex_unlock(&bioscfg_drv.mutex); + return -EINVAL; } ret = kobject_init_and_add(attr_name_kobj, &attr_name_ktype, NULL, "%s", attr_name); if (ret) { pr_err("Error encountered [%d]\n", ret); - kobject_put(attr_name_kobj); goto err_other_attr_init; } @@ -647,10 +646,9 @@ static int hp_add_other_attributes(int attr_type) mutex_unlock(&bioscfg_drv.mutex); return 0; - err_other_attr_init: + kobject_put(attr_name_kobj); mutex_unlock(&bioscfg_drv.mutex); - kfree(obj); return ret; } -- 2.39.3