dmaengine: idxd: fix off by one on cdev dwq refcount
authorDave Jiang <dave.jiang@intel.com>
Thu, 12 Mar 2020 16:23:53 +0000 (09:23 -0700)
committerVinod Koul <vkoul@kernel.org>
Mon, 23 Mar 2020 06:02:06 +0000 (11:32 +0530)
The refcount check for dedicated workqueue (dwq) is off by one and allows
more than 1 user to open the char device. Fix check so only a single user
can open the device.

Fixes: 42d279f9137a ("dmaengine: idxd: add char driver to expose submission portal to userland")
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/158403020187.10208.14117394394540710774.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/idxd/cdev.c

index df47be6..989b7a2 100644 (file)
@@ -81,9 +81,9 @@ static int idxd_cdev_open(struct inode *inode, struct file *filp)
        dev = &idxd->pdev->dev;
        idxd_cdev = &wq->idxd_cdev;
 
-       dev_dbg(dev, "%s called\n", __func__);
+       dev_dbg(dev, "%s called: %d\n", __func__, idxd_wq_refcount(wq));
 
-       if (idxd_wq_refcount(wq) > 1 && wq_dedicated(wq))
+       if (idxd_wq_refcount(wq) > 0 && wq_dedicated(wq))
                return -EBUSY;
 
        ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);