i40e: limit debugfs io ops
Don't let the debugfs register read and write commands try to access outside of the ioremapped space. While we're at it, remove the use of a misleading constant. Change-ID: Ifce2893e232c65c7a76c23532c658f298218a81b Signed-off-by: Shannon Nelson <shannon.nelson@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
f7fc2f2eb1
commit
2ac8b675d9
|
@ -71,7 +71,6 @@
|
|||
#define I40E_MAX_VEB 16
|
||||
|
||||
#define I40E_MAX_NUM_DESCRIPTORS 4096
|
||||
#define I40E_MAX_REGISTER 0x800000
|
||||
#define I40E_MAX_CSR_SPACE (4 * 1024 * 1024 - 64 * 1024)
|
||||
#define I40E_DEFAULT_NUM_DESCRIPTORS 512
|
||||
#define I40E_REQ_DESCRIPTOR_MULTIPLE 32
|
||||
|
@ -408,6 +407,8 @@ struct i40e_pf {
|
|||
/* These are only valid in NPAR modes */
|
||||
u32 npar_max_bw;
|
||||
u32 npar_min_bw;
|
||||
|
||||
u32 ioremap_len;
|
||||
};
|
||||
|
||||
struct i40e_mac_filter {
|
||||
|
|
|
@ -1495,9 +1495,9 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
|
|||
}
|
||||
|
||||
/* check the range on address */
|
||||
if (address >= I40E_MAX_REGISTER) {
|
||||
dev_info(&pf->pdev->dev, "read reg address 0x%08x too large\n",
|
||||
address);
|
||||
if (address > (pf->ioremap_len - sizeof(u32))) {
|
||||
dev_info(&pf->pdev->dev, "read reg address 0x%08x too large, max=0x%08lx\n",
|
||||
address, (pf->ioremap_len - sizeof(u32)));
|
||||
goto command_write_done;
|
||||
}
|
||||
|
||||
|
@ -1514,9 +1514,9 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
|
|||
}
|
||||
|
||||
/* check the range on address */
|
||||
if (address >= I40E_MAX_REGISTER) {
|
||||
dev_info(&pf->pdev->dev, "write reg address 0x%08x too large\n",
|
||||
address);
|
||||
if (address > (pf->ioremap_len - sizeof(u32))) {
|
||||
dev_info(&pf->pdev->dev, "write reg address 0x%08x too large, max=0x%08lx\n",
|
||||
address, (pf->ioremap_len - sizeof(u32)));
|
||||
goto command_write_done;
|
||||
}
|
||||
wr32(&pf->hw, address, value);
|
||||
|
|
|
@ -9939,7 +9939,6 @@ static void i40e_print_features(struct i40e_pf *pf)
|
|||
static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
{
|
||||
struct i40e_aq_get_phy_abilities_resp abilities;
|
||||
unsigned long ioremap_len;
|
||||
struct i40e_pf *pf;
|
||||
struct i40e_hw *hw;
|
||||
static u16 pfs_found;
|
||||
|
@ -9992,15 +9991,15 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
hw = &pf->hw;
|
||||
hw->back = pf;
|
||||
|
||||
ioremap_len = min_t(unsigned long, pci_resource_len(pdev, 0),
|
||||
I40E_MAX_CSR_SPACE);
|
||||
pf->ioremap_len = min_t(int, pci_resource_len(pdev, 0),
|
||||
I40E_MAX_CSR_SPACE);
|
||||
|
||||
hw->hw_addr = ioremap(pci_resource_start(pdev, 0), ioremap_len);
|
||||
hw->hw_addr = ioremap(pci_resource_start(pdev, 0), pf->ioremap_len);
|
||||
if (!hw->hw_addr) {
|
||||
err = -EIO;
|
||||
dev_info(&pdev->dev, "ioremap(0x%04x, 0x%04x) failed: 0x%x\n",
|
||||
(unsigned int)pci_resource_start(pdev, 0),
|
||||
(unsigned int)pci_resource_len(pdev, 0), err);
|
||||
pf->ioremap_len, err);
|
||||
goto err_ioremap;
|
||||
}
|
||||
hw->vendor_id = pdev->vendor;
|
||||
|
|
Loading…
Reference in New Issue