mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-05 22:28:00 +00:00
i40e: Check if the BAR size is large enough before writing to registers
This patch fixes the problem with a kernel panic occurring when trying to bind the i40e driver to a non-i40e port. The problem is fixed by checking if the BAR size in the device is large enough by reading the highest register. Signed-off-by: Adam Ludkiewicz <adam.ludkiewicz@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
c1041d0704
commit
fefa9cfddf
1 changed files with 11 additions and 1 deletions
|
@ -14205,7 +14205,17 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
pf->ioremap_len = min_t(int, pci_resource_len(pdev, 0),
|
||||
I40E_MAX_CSR_SPACE);
|
||||
|
||||
/* We believe that the highest register to read is
|
||||
* I40E_GLGEN_STAT_CLEAR, so we check if the BAR size
|
||||
* is not less than that before mapping to prevent a
|
||||
* kernel panic.
|
||||
*/
|
||||
if (pf->ioremap_len < I40E_GLGEN_STAT_CLEAR) {
|
||||
dev_err(&pdev->dev, "Cannot map registers, bar size 0x%X too small, aborting\n",
|
||||
pf->ioremap_len);
|
||||
err = -ENOMEM;
|
||||
goto err_ioremap;
|
||||
}
|
||||
hw->hw_addr = ioremap(pci_resource_start(pdev, 0), pf->ioremap_len);
|
||||
if (!hw->hw_addr) {
|
||||
err = -EIO;
|
||||
|
|
Loading…
Add table
Reference in a new issue