rsi: fix memory leak in rsi_load_ta_instructions()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Fri, 12 Dec 2014 21:43:55 +0000 (00:43 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 24 Dec 2014 15:26:08 +0000 (17:26 +0200)
Memory allocated by kmemdup() in rsi_load_ta_instructions() is leaked.
But duplication of firmware data here is useless,
so the patch removes kmemdup() at all.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rsi/rsi_91x_sdio_ops.c

index 4834a9abc17177a5cd769418475a433765ed075a..b6cc9ff47fc2e59b3cc92fe4002f05e59d981e56 100644 (file)
@@ -172,7 +172,6 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
                (struct rsi_91x_sdiodev *)adapter->rsi_dev;
        u32 len;
        u32 num_blocks;
-       const u8 *fw;
        const struct firmware *fw_entry = NULL;
        u32 block_size = dev->tx_blk_size;
        int status = 0;
@@ -201,7 +200,6 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
                return status;
        }
 
-       fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
        len = fw_entry->size;
 
        if (len % 4)
@@ -212,7 +210,7 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
        rsi_dbg(INIT_ZONE, "%s: Instruction size:%d\n", __func__, len);
        rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
 
-       status = rsi_copy_to_card(common, fw, len, num_blocks);
+       status = rsi_copy_to_card(common, fw_entry->data, len, num_blocks);
        release_firmware(fw_entry);
        return status;
 }