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
	
	Block a user