"dev" cannot be NULL because it is already checked before
calling dma_pool_create().

Signed-off-by: Daeseok Youn <daeseok.y...@gmail.com>
---
If dev can be NULL, it has NULL deferencing when kmalloc_node()
is called after enabling CONFIG_NUMA.

 mm/dmapool.c |   26 +++++++++-----------------
 1 files changed, 9 insertions(+), 17 deletions(-)

diff --git a/mm/dmapool.c b/mm/dmapool.c
index c69781e..38dfcdd 100644
--- a/mm/dmapool.c
+++ b/mm/dmapool.c
@@ -170,24 +170,16 @@ struct dma_pool *dma_pool_create(const char *name, struct 
device *dev,
        retval->boundary = boundary;
        retval->allocation = allocation;
 
-       if (dev) {
-               int ret;
+       INIT_LIST_HEAD(&retval->pools);
 
-               mutex_lock(&pools_lock);
-               if (list_empty(&dev->dma_pools))
-                       ret = device_create_file(dev, &dev_attr_pools);
-               else
-                       ret = 0;
-               /* note:  not currently insisting "name" be unique */
-               if (!ret)
-                       list_add(&retval->pools, &dev->dma_pools);
-               else {
-                       kfree(retval);
-                       retval = NULL;
-               }
-               mutex_unlock(&pools_lock);
+       mutex_lock(&pools_lock);
+       if (list_empty(&dev->dma_pools) &&
+           device_create_file(dev, &dev_attr_pools)) {
+               kfree(retval);
+               return NULL;
        } else
-               INIT_LIST_HEAD(&retval->pools);
+               list_add(&retval->pools, &dev->dma_pools);
+       mutex_unlock(&pools_lock);
 
        return retval;
 }
-- 
1.7.4.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to