Skip to content

Commit

Permalink
i40e: limit debugfs io ops
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shannon Nelson authored and Jeff Kirsher committed Sep 30, 2015
1 parent f7fc2f2 commit 2ac8b67
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 12 deletions.
3 changes: 2 additions & 1 deletion drivers/net/ethernet/intel/i40e/i40e.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down
12 changes: 6 additions & 6 deletions drivers/net/ethernet/intel/i40e/i40e_debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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);
Expand Down
9 changes: 4 additions & 5 deletions drivers/net/ethernet/intel/i40e/i40e_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 2ac8b67

Please sign in to comment.