kobject_add takes a refcount to the object dev->kobj, but forget to
release it before return, lead to a memory leak.

Signed-off-by: Lin Yi <[email protected]>
Fixes: 7bd1d5edd016 ("Merge branch 'x86-urgent-for-linus' of
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip")
Cc: [email protected]
---
 block/blk-mq-sysfs.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
index d6e1a9b..7499a47 100644
--- a/block/blk-mq-sysfs.c
+++ b/block/blk-mq-sysfs.c
@@ -323,8 +323,10 @@ int __blk_mq_register_dev(struct device *dev, struct 
request_queue *q)
        lockdep_assert_held(&q->sysfs_lock);
 
        ret = kobject_add(q->mq_kobj, kobject_get(&dev->kobj), "%s", "mq");
-       if (ret < 0)
+       if (ret < 0) {
+               kobject_put(&dev->kobj);
                goto out;
+       }
 
        kobject_uevent(q->mq_kobj, KOBJ_ADD);
 
-- 
1.9.1


Reply via email to