Commit cbf8de16 authored by Hans-Christian Egtvedt's avatar Hans-Christian Egtvedt Committed by Haavard Skinnemoen

avr32: clean up memory allocation in at32_add_device_mci

This patch will check if the kzalloc for the MCI DMA struct actually
returns a valid address, and also clean up properly if it fails or the
function fails at a later stage.

This also silences a compiler warning about using the slave variable
uninitialized.
Signed-off-by: default avatarHans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
Signed-off-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
parent 754a00ae
...@@ -1345,6 +1345,8 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data) ...@@ -1345,6 +1345,8 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
goto fail; goto fail;
slave = kzalloc(sizeof(struct mci_dma_data), GFP_KERNEL); slave = kzalloc(sizeof(struct mci_dma_data), GFP_KERNEL);
if (!slave)
goto fail;
slave->sdata.dma_dev = &dw_dmac0_device.dev; slave->sdata.dma_dev = &dw_dmac0_device.dev;
slave->sdata.reg_width = DW_DMA_SLAVE_WIDTH_32BIT; slave->sdata.reg_width = DW_DMA_SLAVE_WIDTH_32BIT;
...@@ -1357,7 +1359,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data) ...@@ -1357,7 +1359,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
if (platform_device_add_data(pdev, data, if (platform_device_add_data(pdev, data,
sizeof(struct mci_platform_data))) sizeof(struct mci_platform_data)))
goto fail; goto fail_free;
/* CLK line is common to both slots */ /* CLK line is common to both slots */
pioa_mask = 1 << 10; pioa_mask = 1 << 10;
...@@ -1381,7 +1383,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data) ...@@ -1381,7 +1383,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
/* Slot is unused */ /* Slot is unused */
break; break;
default: default:
goto fail; goto fail_free;
} }
select_peripheral(PIOA, pioa_mask, PERIPH_A, 0); select_peripheral(PIOA, pioa_mask, PERIPH_A, 0);
...@@ -1408,7 +1410,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data) ...@@ -1408,7 +1410,7 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
break; break;
default: default:
if (!data->slot[0].bus_width) if (!data->slot[0].bus_width)
goto fail; goto fail_free;
data->slot[1].bus_width = 0; data->slot[1].bus_width = 0;
break; break;
...@@ -1419,9 +1421,10 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data) ...@@ -1419,9 +1421,10 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
platform_device_add(pdev); platform_device_add(pdev);
return pdev; return pdev;
fail_free:
kfree(slave);
fail: fail:
data->dma_slave = NULL; data->dma_slave = NULL;
kfree(slave);
platform_device_put(pdev); platform_device_put(pdev);
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment