mlx4_core: Avoid vunmap() of invalid pointer if allocation fails
authorAli Ayoub <ali@dev.mellanox.co.il>
Tue, 11 Jan 2011 01:42:06 +0000 (17:42 -0800)
committerRoland Dreier <rolandd@cisco.com>
Tue, 11 Jan 2011 01:42:06 +0000 (17:42 -0800)
Signed-off-by: Ali Ayoub <ali@mellanox.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/net/mlx4/alloc.c

index 8f4bf1f07c11e824e8e21785f122c5d0d66775c5..3a4277f6fac4171991a24a9ebd1de3f032a96636 100644 (file)
@@ -178,6 +178,7 @@ int mlx4_buf_alloc(struct mlx4_dev *dev, int size, int max_direct,
        } else {
                int i;
 
+               buf->direct.buf  = NULL;
                buf->nbufs       = (size + PAGE_SIZE - 1) / PAGE_SIZE;
                buf->npages      = buf->nbufs;
                buf->page_shift  = PAGE_SHIFT;
@@ -229,7 +230,7 @@ void mlx4_buf_free(struct mlx4_dev *dev, int size, struct mlx4_buf *buf)
                dma_free_coherent(&dev->pdev->dev, size, buf->direct.buf,
                                  buf->direct.map);
        else {
-               if (BITS_PER_LONG == 64)
+               if (BITS_PER_LONG == 64 && buf->direct.buf)
                        vunmap(buf->direct.buf);
 
                for (i = 0; i < buf->nbufs; ++i)