#define BRCMF_RANDOM_SEED_MAGIC                0xfeedc0de
 #define BRCMF_RANDOM_SEED_LENGTH       0x100
 
+static noinline_for_stack void
+brcmf_pcie_provide_random_bytes(struct brcmf_pciedev_info *devinfo, u32 address)
+{
+       u8 randbuf[BRCMF_RANDOM_SEED_LENGTH];
+
+       get_random_bytes(randbuf, BRCMF_RANDOM_SEED_LENGTH);
+       memcpy_toio(devinfo->tcm + address, randbuf, BRCMF_RANDOM_SEED_LENGTH);
+}
+
 static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
                                        const struct firmware *fw, void *nvram,
                                        u32 nvram_len)
                                .length = cpu_to_le32(rand_len),
                                .magic = cpu_to_le32(BRCMF_RANDOM_SEED_MAGIC),
                        };
-                       void *randbuf;
 
                        /* Some Apple chips/firmwares expect a buffer of random
                         * data to be present before NVRAM
                                    sizeof(footer));
 
                        address -= rand_len;
-                       randbuf = kzalloc(rand_len, GFP_KERNEL);
-                       get_random_bytes(randbuf, rand_len);
-                       memcpy_toio(devinfo->tcm + address, randbuf, rand_len);
-                       kfree(randbuf);
+                       brcmf_pcie_provide_random_bytes(devinfo, address);
                }
        } else {
                brcmf_dbg(PCIE, "No matching NVRAM file found %s\n",