drivers: base: transport_class: fix possible memory leak
authorYang Yingliang <yangyingliang@huawei.com>
Thu, 10 Nov 2022 10:23:07 +0000 (18:23 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:33:34 +0000 (09:33 +0100)
[ Upstream commit a86367803838b369fe5486ac18771d14723c258c ]

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>
Link: https://lore.kernel.org/r/20221110102307.3492557-1-yangyingliang@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/transport_class.h

index 63076fb835e34244b3792948fb573ca4e463a2a6..2efc271a96fa6bcaa3ec9506a927b67aa080a36e 100644 (file)
@@ -70,8 +70,14 @@ 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