{
        u32 num_blocks, offset, i;
        u16 msb_address, lsb_address;
-       u8 temp_buf[block_size];
+       u8 *temp_buf;
        int status;
 
        num_blocks = instructions_sz / block_size;
        rsi_dbg(INFO_ZONE, "ins_size: %d, num_blocks: %d\n",
                instructions_sz, num_blocks);
 
+       temp_buf = kmalloc(block_size, GFP_KERNEL);
+       if (!temp_buf)
+               return -ENOMEM;
+
        /* Loading DM ms word in the sdio slave */
        status = rsi_sdio_master_access_msword(adapter, msb_address);
        if (status < 0) {
                rsi_dbg(ERR_ZONE, "%s: Unable to set ms word reg\n", __func__);
-               return status;
+               goto out_free;
        }
 
        for (offset = 0, i = 0; i < num_blocks; i++, offset += block_size) {
                                         temp_buf, block_size);
                if (status < 0) {
                        rsi_dbg(ERR_ZONE, "%s: failed to write\n", __func__);
-                       return status;
+                       goto out_free;
                }
                rsi_dbg(INFO_ZONE, "%s: loading block: %d\n", __func__, i);
                base_address += block_size;
                                rsi_dbg(ERR_ZONE,
                                        "%s: Unable to set ms word reg\n",
                                        __func__);
-                               return status;
+                               goto out_free;
                        }
                }
        }
                                         temp_buf,
                                         instructions_sz % block_size);
                if (status < 0)
-                       return status;
+                       goto out_free;
                rsi_dbg(INFO_ZONE,
                        "Written Last Block in Address 0x%x Successfully\n",
                        offset | RSI_SD_REQUEST_MASTER);
        }
-       return 0;
+
+       status = 0;
+out_free:
+       kfree(temp_buf);
+       return status;
 }
 
 #define FLASH_SIZE_ADDR                 0x04000016