| From ce944f78edcb92f0fdc4aebadec76c4b8c09648d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 8 Sep 2021 10:52:36 -0700 |
| Subject: e100: fix length calculation in e100_get_regs_len |
| |
| From: Jacob Keller <jacob.e.keller@intel.com> |
| |
| [ Upstream commit 4329c8dc110b25d5f04ed20c6821bb60deff279f ] |
| |
| commit abf9b902059f ("e100: cleanup unneeded math") tried to simplify |
| e100_get_regs_len and remove a double 'divide and then multiply' |
| calculation that the e100_reg_regs_len function did. |
| |
| This change broke the size calculation entirely as it failed to account |
| for the fact that the numbered registers are actually 4 bytes wide and |
| not 1 byte. This resulted in a significant under allocation of the |
| register buffer used by e100_get_regs. |
| |
| Fix this by properly multiplying the register count by u32 first before |
| adding the size of the dump buffer. |
| |
| Fixes: abf9b902059f ("e100: cleanup unneeded math") |
| Reported-by: Felicitas Hetzelt <felicitashetzelt@gmail.com> |
| Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> |
| Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/intel/e100.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c |
| index 609e47b8287d..fee329d98621 100644 |
| --- a/drivers/net/ethernet/intel/e100.c |
| +++ b/drivers/net/ethernet/intel/e100.c |
| @@ -2435,7 +2435,11 @@ static void e100_get_drvinfo(struct net_device *netdev, |
| static int e100_get_regs_len(struct net_device *netdev) |
| { |
| struct nic *nic = netdev_priv(netdev); |
| - return 1 + E100_PHY_REGS + sizeof(nic->mem->dump_buf); |
| + |
| + /* We know the number of registers, and the size of the dump buffer. |
| + * Calculate the total size in bytes. |
| + */ |
| + return (1 + E100_PHY_REGS) * sizeof(u32) + sizeof(nic->mem->dump_buf); |
| } |
| |
| static void e100_get_regs(struct net_device *netdev, |
| -- |
| 2.33.0 |
| |