diff mbox series

drivers: base: transport_class: fix possible memory leak

Message ID 20221110034809.17258-1-yangyingliang@huawei.com
State Superseded
Headers show
Series drivers: base: transport_class: fix possible memory leak | expand

Commit Message

Yang Yingliang Nov. 10, 2022, 3:48 a.m. UTC
Current some drivers(like iscsi) call transport_register_device()
failed, they don't call transport_destroy_device() to release the
memory allocated in transport_setup_device(), because they don't
know what was done, it should be internal thing to release the
resource in register function. So fix this leak by calling destroy
function inside register function.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
---
 include/linux/transport_class.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Yang Yingliang Nov. 10, 2022, 8:44 a.m. UTC | #1
Hi Greg,

On 2022/11/10 16:18, Greg KH wrote:
> On Thu, Nov 10, 2022 at 11:48:09AM +0800, Yang Yingliang wrote:
>> Current some drivers(like iscsi) call transport_register_device()
>> failed, they don't call transport_destroy_device() to release the
>> memory allocated in transport_setup_device(), because they don't
>> know what was done, it should be internal thing to release the
>> resource in register function. So fix this leak by calling destroy
>> function inside register function.
>>
>> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
>> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
>> ---
>>   include/linux/transport_class.h | 9 ++++++++-
>>   1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/linux/transport_class.h b/include/linux/transport_class.h
>> index 63076fb835e3..f4835250bbfc 100644
>> --- a/include/linux/transport_class.h
>> +++ b/include/linux/transport_class.h
>> @@ -70,8 +70,15 @@ void transport_destroy_device(struct device *);
>>   static inline int
>>   transport_register_device(struct device *dev)
>>   {
>> +	int ret;
>> +
>>   	transport_setup_device(dev);
>> -	return transport_add_device(dev);
>> +	ret = transport_add_device(dev);
>> +	if (ret) {
>> +		transport_destroy_device(dev);
>> +	}
> Please use scripts/checkpatch.pl on your patches before sending them out
Sure, of course. :)
> so you don't get grumpy maintainers asking you to use
> scripts/checkpatch.pl on your patches :)
I sent a fix patch to iscsi system earlier:
https://patchwork.kernel.org/project/linux-scsi/patch/20221109092421.3111613-1-yangyingliang@huawei.com/

Mike give his point in the mail, so I send a new patch keep iscsi 
maintainers Cced.

Thanks,
Yang
>
> thanks,
>
> greg k-h
>
> .
diff mbox series

Patch

diff --git a/include/linux/transport_class.h b/include/linux/transport_class.h
index 63076fb835e3..f4835250bbfc 100644
--- a/include/linux/transport_class.h
+++ b/include/linux/transport_class.h
@@ -70,8 +70,15 @@  void transport_destroy_device(struct device *);
 static inline int
 transport_register_device(struct device *dev)
 {
+	int ret;
+
 	transport_setup_device(dev);
-	return transport_add_device(dev);
+	ret = transport_add_device(dev);
+	if (ret) {
+		transport_destroy_device(dev);
+	}
+
+	return ret;
 }
 
 static inline void