浏览代码

[MTD] fix use after free in register_mtd_blktrans

Reported-by: Dan Carpenter <error27@gmail.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Marcin Slusarz 16 年之前
父节点
当前提交
2cf3a11494
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      drivers/mtd/mtd_blkdevs.c

+ 2 - 1
drivers/mtd/mtd_blkdevs.c

@@ -382,11 +382,12 @@ int register_mtd_blktrans(struct mtd_blktrans_ops *tr)
 	tr->blkcore_priv->thread = kthread_run(mtd_blktrans_thread, tr,
 	tr->blkcore_priv->thread = kthread_run(mtd_blktrans_thread, tr,
 			"%sd", tr->name);
 			"%sd", tr->name);
 	if (IS_ERR(tr->blkcore_priv->thread)) {
 	if (IS_ERR(tr->blkcore_priv->thread)) {
+		int ret = PTR_ERR(tr->blkcore_priv->thread);
 		blk_cleanup_queue(tr->blkcore_priv->rq);
 		blk_cleanup_queue(tr->blkcore_priv->rq);
 		unregister_blkdev(tr->major, tr->name);
 		unregister_blkdev(tr->major, tr->name);
 		kfree(tr->blkcore_priv);
 		kfree(tr->blkcore_priv);
 		mutex_unlock(&mtd_table_mutex);
 		mutex_unlock(&mtd_table_mutex);
-		return PTR_ERR(tr->blkcore_priv->thread);
+		return ret;
 	}
 	}
 
 
 	INIT_LIST_HEAD(&tr->devs);
 	INIT_LIST_HEAD(&tr->devs);