platform/x86: hp-bioscfg: Fix error handling in hp_add_other_attributes()
commit f40f939917b2b4cbf18450096c0ce1c58ed59fae upstream. '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: a34fc329b189 ("platform/x86: hp-bioscfg: bioscfg") Cc: stable@vger.kernel.org # 6.6.x: c5dbf0416000: platform/x86: hp-bioscfg: Simplify return check in hp_add_other_attributes() Cc: stable@vger.kernel.org # 6.6.x: 5736aa9537c9: platform/x86: hp-bioscfg: move mutex_lock() down in hp_add_other_attributes() Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <error27@gmail.com> Closes: https://lore.kernel.org/r/202309201412.on0VXJGo-lkp@intel.com/ Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> [ij: Added the stable dep tags] Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Link: https://lore.kernel.org/r/20231113200742.3593548-3-harshit.m.mogalapalli@oracle.com Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e73ebb9355
commit
9a98ab01e3
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user