Unverified Commit f40f9399 authored by Harshit Mogalapalli's avatar Harshit Mogalapalli Committed by Ilpo Järvinen
Browse files

platform/x86: hp-bioscfg: Fix error handling in hp_add_other_attributes()



'attr_name_kobj' is allocated using kzalloc, but on all the error paths
it is not freed, hence we have a memory leak.

Fix the error path before kobject_init_and_add() by adding kfree().

kobject_put() must be always called after passing the object to
kobject_init_and_add(). Only the error path which is immediately next
to kobject_init_and_add() calls kobject_put() and not any other error
path after it.

Fix the error handling after kobject_init_and_add() by moving the
kobject_put() into the goto label err_other_attr_init that is already
used by all the error paths after kobject_init_and_add().

Fixes: a34fc329 ("platform/x86: hp-bioscfg: bioscfg")
Cc: stable@vger.kernel.org # 6.6.x: c5dbf041: platform/x86: hp-bioscfg: Simplify return check in hp_add_other_attributes()
Cc: stable@vger.kernel.org # 6.6.x: 5736aa95: platform/x86: hp-bioscfg: move mutex_lock() down in hp_add_other_attributes()
Reported-by: default avatarkernel test robot <lkp@intel.com>
Reported-by: default avatarDan Carpenter <error27@gmail.com>
Closes: https://lore.kernel.org/r/202309201412.on0VXJGo-lkp@intel.com/


Signed-off-by: default avatarHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
[ij: Added the stable dep tags]
Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20231113200742.3593548-3-harshit.m.mogalapalli@oracle.com


Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent 5736aa95
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -613,14 +613,14 @@ 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);
		goto unlock_drv_mutex;
	}

	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;
	}

@@ -645,6 +645,8 @@ static int hp_add_other_attributes(int attr_type)
	return 0;

err_other_attr_init:
	kobject_put(attr_name_kobj);
unlock_drv_mutex:
	mutex_unlock(&bioscfg_drv.mutex);
	kfree(obj);
	return ret;