Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ac8b675 authored by Shannon Nelson's avatar Shannon Nelson Committed by Jeff Kirsher
Browse files

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: default avatarShannon Nelson <shannon.nelson@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent f7fc2f2e
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -71,7 +71,6 @@
#define I40E_MAX_VEB          16
#define I40E_MAX_VEB          16


#define I40E_MAX_NUM_DESCRIPTORS      4096
#define I40E_MAX_NUM_DESCRIPTORS      4096
#define I40E_MAX_REGISTER     0x800000
#define I40E_MAX_CSR_SPACE (4 * 1024 * 1024 - 64 * 1024)
#define I40E_MAX_CSR_SPACE (4 * 1024 * 1024 - 64 * 1024)
#define I40E_DEFAULT_NUM_DESCRIPTORS  512
#define I40E_DEFAULT_NUM_DESCRIPTORS  512
#define I40E_REQ_DESCRIPTOR_MULTIPLE  32
#define I40E_REQ_DESCRIPTOR_MULTIPLE  32
@@ -408,6 +407,8 @@ struct i40e_pf {
	/* These are only valid in NPAR modes */
	/* These are only valid in NPAR modes */
	u32 npar_max_bw;
	u32 npar_max_bw;
	u32 npar_min_bw;
	u32 npar_min_bw;

	u32 ioremap_len;
};
};


struct i40e_mac_filter {
struct i40e_mac_filter {
+6 −6
Original line number Original line Diff line number Diff line
@@ -1495,9 +1495,9 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
		}
		}


		/* check the range on address */
		/* check the range on address */
		if (address >= I40E_MAX_REGISTER) {
		if (address > (pf->ioremap_len - sizeof(u32))) {
			dev_info(&pf->pdev->dev, "read reg address 0x%08x too large\n",
			dev_info(&pf->pdev->dev, "read reg address 0x%08x too large, max=0x%08lx\n",
				 address);
				 address, (pf->ioremap_len - sizeof(u32)));
			goto command_write_done;
			goto command_write_done;
		}
		}


@@ -1514,9 +1514,9 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
		}
		}


		/* check the range on address */
		/* check the range on address */
		if (address >= I40E_MAX_REGISTER) {
		if (address > (pf->ioremap_len - sizeof(u32))) {
			dev_info(&pf->pdev->dev, "write reg address 0x%08x too large\n",
			dev_info(&pf->pdev->dev, "write reg address 0x%08x too large, max=0x%08lx\n",
				 address);
				 address, (pf->ioremap_len - sizeof(u32)));
			goto command_write_done;
			goto command_write_done;
		}
		}
		wr32(&pf->hw, address, value);
		wr32(&pf->hw, address, value);
+4 −5
Original line number Original line Diff line number Diff line
@@ -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)
static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
{
	struct i40e_aq_get_phy_abilities_resp abilities;
	struct i40e_aq_get_phy_abilities_resp abilities;
	unsigned long ioremap_len;
	struct i40e_pf *pf;
	struct i40e_pf *pf;
	struct i40e_hw *hw;
	struct i40e_hw *hw;
	static u16 pfs_found;
	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 = &pf->hw;
	hw->back = pf;
	hw->back = pf;


	ioremap_len = min_t(unsigned long, pci_resource_len(pdev, 0),
	pf->ioremap_len = min_t(int, pci_resource_len(pdev, 0),
				I40E_MAX_CSR_SPACE);
				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) {
	if (!hw->hw_addr) {
		err = -EIO;
		err = -EIO;
		dev_info(&pdev->dev, "ioremap(0x%04x, 0x%04x) failed: 0x%x\n",
		dev_info(&pdev->dev, "ioremap(0x%04x, 0x%04x) failed: 0x%x\n",
			 (unsigned int)pci_resource_start(pdev, 0),
			 (unsigned int)pci_resource_start(pdev, 0),
			 (unsigned int)pci_resource_len(pdev, 0), err);
			 pf->ioremap_len, err);
		goto err_ioremap;
		goto err_ioremap;
	}
	}
	hw->vendor_id = pdev->vendor;
	hw->vendor_id = pdev->vendor;