This fixes a DMA mapping leak in error path of the b43_setup_dmaring function. When DMA mapping fails because of device mask preventing the allocated DMA zone from being used, the mapping should be reversed before the second try with GFP_DMA. Signed-off-by: Christian Casteyde <casteyde.christian@xxxxxxx> --- --- linux-2.6.25.old/drivers/net/wireless/b43/dma.c 2008-03-22 17:28:52.000000000 +0100 +++ linux-2.6.25/drivers/net/wireless/b43/dma.c 2008-03-22 17:57:44.000000000 +0100 @@ -854,6 +854,10 @@ if (b43_dma_mapping_error(ring, dma_test, b43_txhdr_size(dev))) { /* ugh realloc */ + if (!dma_mapping_error(dma_test)) + dma_unmap_single(dev->dev->dev, + dma_test, b43_txhdr_size(dev), + DMA_TO_DEVICE); kfree(ring->txhdr_cache); ring->txhdr_cache = kcalloc(nr_slots, b43_txhdr_size(dev), @@ -867,8 +871,13 @@ DMA_TO_DEVICE); if (b43_dma_mapping_error(ring, dma_test, - b43_txhdr_size(dev))) + b43_txhdr_size(dev))) { + if (!dma_mapping_error(dma_test)) + dma_unmap_single(dev->dev->dev, + dma_test, b43_txhdr_size(dev), + DMA_TO_DEVICE); goto err_kfree_txhdr_cache; + } } dma_unmap_single(dev->dev->dev, -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html