lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 27 Mar 2018 08:00:50 +0530 From: arvindY <arvind.yadav.cs@...il.com> To: Mathieu Poirier <mathieu.poirier@...aro.org> Cc: linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org Subject: Re: [PATCH] coresight: use put_device() instead of kfree() On Tuesday 27 March 2018 03:16 AM, Mathieu Poirier wrote: > drivers/hwtracing/coresight/coresight.c > On 18 March 2018 at 01:38, Arvind Yadav <arvind.yadav.cs@...il.com> wrote: >> Never directly free @dev after calling device_register(), even >> if it returned an error. Always use put_device() to give up the >> reference initialized. >> >> Signed-off-by: Arvind Yadav <arvind.yadav.cs@...il.com> >> --- >> drivers/hwtracing/coresight/coresight.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c >> index 389c4ba..132dfbc 100644 >> --- a/drivers/hwtracing/coresight/coresight.c >> +++ b/drivers/hwtracing/coresight/coresight.c >> @@ -1026,8 +1026,10 @@ struct coresight_device *coresight_register(struct coresight_desc *desc) >> dev_set_name(&csdev->dev, "%s", desc->pdata->name); >> >> ret = device_register(&csdev->dev); >> - if (ret) >> - goto err_device_register; >> + if (ret) { >> + put_device(&csdev->dev); >> + goto err_kzalloc_csdev; >> + } >> >> mutex_lock(&coresight_mutex); >> >> @@ -1038,8 +1040,6 @@ struct coresight_device *coresight_register(struct coresight_desc *desc) >> >> return csdev; >> >> -err_device_register: >> - kfree(conns); > Apologies for the late reply, I was travelling. > > I suggest to simply replace kfree() with put_device() in order to > concentrate the error handling code in the same area and make sure > that memory allocated for @conns and @refcnts is freed. > > Thanks, > Mathieu If you will see the comment for device_register(drivers/base/core.c) there is mentioned that 'NOTE: _Never_ directly free @dev after calling this function, even if it returned an error! Always use put_device() to give up the reference initialized in this function instead. Here put_device() will decrement the last reference and then free the memory by calling dev->release. Internally put_device() -> kobject_put() -> kobject_cleanup() which is responsible to call 'dev -> release' and also free other kobject resources. we should always avoid kfree() if device_register() returned an error. Otherwise it'll not do clean up of other kobject resources. ~arvind >> err_kzalloc_conns: >> kfree(refcnts); >> err_kzalloc_refcnts: >> -- >> 2.7.4 >>
Powered by blists - more mailing lists