[PATCH] dmaengine: idxd: Fix error handling in idxd_wq_cdev_dev_setup()

Subsystems: dma generic offload engine subsystem, intel idxd driver, the rest

STALE2372d LANDED

Landed in mainline as 2227ab4216cd on 2020-02-13.

3 messages, 3 authors, 2020-02-13 · open the first message on its own page

[PATCH] dmaengine: idxd: Fix error handling in idxd_wq_cdev_dev_setup()

From: Dan Carpenter <hidden>
Date: 2020-02-05 12:33:03

We can't call kfree(dev) after calling device_register(dev).  The "dev"
pointer has to be freed using put_device().

Fixes: 42d279f9137a ("dmaengine: idxd: add char driver to expose submission portal to userland")
Signed-off-by: Dan Carpenter <redacted>
---
 drivers/dma/idxd/cdev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/idxd/cdev.c b/drivers/dma/idxd/cdev.c
index 1d7347825b95..df47be612ebb 100644
--- a/drivers/dma/idxd/cdev.c
+++ b/drivers/dma/idxd/cdev.c
@@ -204,6 +204,7 @@ static int idxd_wq_cdev_dev_setup(struct idxd_wq *wq)
 	minor = ida_simple_get(&cdev_ctx->minor_ida, 0, MINORMASK, GFP_KERNEL);
 	if (minor < 0) {
 		rc = minor;
+		kfree(dev);
 		goto ida_err;
 	}
 
@@ -212,7 +213,6 @@ static int idxd_wq_cdev_dev_setup(struct idxd_wq *wq)
 	rc = device_register(dev);
 	if (rc < 0) {
 		dev_err(&idxd->pdev->dev, "device register failed\n");
-		put_device(dev);
 		goto dev_reg_err;
 	}
 	idxd_cdev->minor = minor;
@@ -221,8 +221,8 @@ static int idxd_wq_cdev_dev_setup(struct idxd_wq *wq)
 
  dev_reg_err:
 	ida_simple_remove(&cdev_ctx->minor_ida, MINOR(dev->devt));
+	put_device(dev);
  ida_err:
-	kfree(dev);
 	idxd_cdev->dev = NULL;
 	return rc;
 }
-- 
2.11.0

Re: [PATCH] dmaengine: idxd: Fix error handling in idxd_wq_cdev_dev_setup()

From: Dave Jiang <dave.jiang@intel.com>
Date: 2020-02-05 16:32:08


On 2/5/20 5:32 AM, Dan Carpenter wrote:
We can't call kfree(dev) after calling device_register(dev).  The "dev"
pointer has to be freed using put_device().

Fixes: 42d279f9137a ("dmaengine: idxd: add char driver to expose submission portal to userland")
Signed-off-by: Dan Carpenter <redacted>
Acked-by: Dave Jiang <dave.jiang@intel.com>
quoted hunk
---
  drivers/dma/idxd/cdev.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/idxd/cdev.c b/drivers/dma/idxd/cdev.c
index 1d7347825b95..df47be612ebb 100644
--- a/drivers/dma/idxd/cdev.c
+++ b/drivers/dma/idxd/cdev.c
@@ -204,6 +204,7 @@ static int idxd_wq_cdev_dev_setup(struct idxd_wq *wq)
  	minor = ida_simple_get(&cdev_ctx->minor_ida, 0, MINORMASK, GFP_KERNEL);
  	if (minor < 0) {
  		rc = minor;
+		kfree(dev);
  		goto ida_err;
  	}
  
@@ -212,7 +213,6 @@ static int idxd_wq_cdev_dev_setup(struct idxd_wq *wq)
  	rc = device_register(dev);
  	if (rc < 0) {
  		dev_err(&idxd->pdev->dev, "device register failed\n");
-		put_device(dev);
  		goto dev_reg_err;
  	}
  	idxd_cdev->minor = minor;
@@ -221,8 +221,8 @@ static int idxd_wq_cdev_dev_setup(struct idxd_wq *wq)
  
   dev_reg_err:
  	ida_simple_remove(&cdev_ctx->minor_ida, MINOR(dev->devt));
+	put_device(dev);
   ida_err:
-	kfree(dev);
  	idxd_cdev->dev = NULL;
  	return rc;
  }

Re: [PATCH] dmaengine: idxd: Fix error handling in idxd_wq_cdev_dev_setup()

From: Vinod Koul <vkoul@kernel.org>
Date: 2020-02-13 15:07:45

On 05-02-20, 15:32, Dan Carpenter wrote:
We can't call kfree(dev) after calling device_register(dev).  The "dev"
pointer has to be freed using put_device().
Applied, thanks

-- 
~Vinod
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help