brcmfmac: add basic validation of shared RAM address
authorRafał Miłecki <rafal@milecki.pl>
Wed, 20 Feb 2019 10:30:47 +0000 (11:30 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 20 Feb 2019 17:55:22 +0000 (19:55 +0200)
While experimenting with firmware loading I ended up in a state of
firmware reporting shared RAM address 0x04000001. It was causing:
[   94.448015] Unable to handle kernel paging request at virtual address cd680001
due to reading out of the mapped memory.

This patch adds some basic validation to avoid kernel crashes due to the
unexpected firmware behavior.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c

index 257f919c52ccd8dbd60a9f3fd2473856fbc9e7e0..58a6bc37935878db7669ffed776719fc0ecf1e87 100644 (file)
@@ -1560,6 +1560,12 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
                brcmf_err(bus, "FW failed to initialize\n");
                return -ENODEV;
        }
+       if (sharedram_addr < devinfo->ci->rambase ||
+           sharedram_addr >= devinfo->ci->rambase + devinfo->ci->ramsize) {
+               brcmf_err(bus, "Invalid shared RAM address 0x%08x\n",
+                         sharedram_addr);
+               return -ENODEV;
+       }
        brcmf_dbg(PCIE, "Shared RAM addr: 0x%08x\n", sharedram_addr);
 
        return (brcmf_pcie_init_share_ram_info(devinfo, sharedram_addr));